1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
struct _IOBuffer 
{ 
  unsigned char *buffer; 
 
  size_t offset; /* reading */ 
  size_t len, allocated; /* writing */ 
 
  struct object *sub, *source, *this; 
  struct program *error_mode; 
  struct object *output; 
  struct pike_string *str; 
 
  struct { 
      unsigned char *ptr; 
      size_t len; 
  } stash; 
 
  INT_TYPE num_malloc, num_move; // debug mainly, for testsuite 
  INT32 locked, locked_move; 
  char malloced, output_triggered; 
}; 
 
struct rewind_to { 
    struct _IOBuffer *io; 
    size_t rewind_to; 
#ifdef PIKE_DEBUG 
    int old_locked_move; 
#endif 
}; 
 
typedef struct _IOBuffer IOBuffer; 
 
extern void init_stdio_buffer(void); 
extern void exit_stdio_buffer(void);