/* || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. */ #ifndef DYNAMIC_BUFFER_H #define DYNAMIC_BUFFER_H #define BUFFER_BEGIN_SIZE 4080 struct dynbuf_string_s { char *str; SIZE_T len; }; typedef struct dynbuf_string_s dynbuf_string; struct dynamic_buffer_s { dynbuf_string s; SIZE_T bufsize; }; typedef struct dynamic_buffer_s dynamic_buffer; PMOD_EXPORT extern dynamic_buffer pike_global_buffer; /* Prototypes begin here */ PMOD_EXPORT char *low_make_buf_space(ptrdiff_t space, dynamic_buffer *buf); PMOD_EXPORT void low_my_putchar(int b,dynamic_buffer *buf); PMOD_EXPORT void low_my_binary_strcat(const char *b, size_t l, dynamic_buffer *buf); PMOD_EXPORT void debug_initialize_buf(dynamic_buffer *buf); PMOD_EXPORT void low_reinit_buf(dynamic_buffer *buf); PMOD_EXPORT void low_init_buf_with_string(dynbuf_string s, dynamic_buffer *buf); PMOD_EXPORT void toss_buffer(dynamic_buffer *buf); PMOD_EXPORT struct pike_string *debug_low_free_buf(dynamic_buffer *buf); PMOD_EXPORT dynbuf_string complex_free_buf(dynamic_buffer *old_buf); PMOD_EXPORT char *simple_free_buf(dynamic_buffer *old_buf); PMOD_EXPORT struct pike_string *debug_free_buf(dynamic_buffer *old_buf); PMOD_EXPORT void abandon_buf(dynamic_buffer *old_buf); PMOD_EXPORT char *make_buf_space(INT32 space); PMOD_EXPORT void my_putchar(int b); PMOD_EXPORT void my_binary_strcat(const char *b, ptrdiff_t l); PMOD_EXPORT void my_strcat(const char *b); PMOD_EXPORT void init_buf(dynamic_buffer *old_buf); PMOD_EXPORT void init_buf_with_string(dynamic_buffer *old_buf, dynbuf_string s); PMOD_EXPORT void save_buffer (dynamic_buffer *save_buf); PMOD_EXPORT void restore_buffer (dynamic_buffer *save_buf); /* PMOD_EXPORT char *debug_return_buf(void); */ /* Prototypes end here */ #ifdef DEBUG_MALLOC #define initialize_buf(X) \ do { dynamic_buffer *b_=(X); debug_initialize_buf(b_); \ debug_malloc_touch(b_->s.str); } while(0) #define low_free_buf(X) \ ((struct pike_string *)debug_malloc_pass(debug_low_free_buf(X))) #define free_buf(OLD_BUF) \ ((struct pike_string *)debug_malloc_pass(debug_free_buf(OLD_BUF))) #define return_buf() \ ((char *)debug_malloc_pass(debug_return_buf())) #else #define initialize_buf debug_initialize_buf #define low_free_buf debug_low_free_buf #define free_buf debug_free_buf #define return_buf debug_return_buf #endif #endif