pike.git / src / modules / _Stdio / buffer.cmod

version» Context lines:

pike.git/src/modules/_Stdio/buffer.cmod:134:    if( pos > io_len( io ) )    return -1;    switch( io->buffer[io->offset+pos] )    {    SPACECASE8    return 1;    }    return 0;    }    -  static void io_unstash_malloc( IOBuffer *io ) +  static int io_unstash_malloc( IOBuffer *io )    { -  if( LIKELY(io->malloced || !io->stash.ptr) ) -  return; +  if( LIKELY(!io->stash.ptr) ) +  return 0;       if( io->stash.len >= io_len( io ) )    { -  +  if( io_len(io) ) +  { +  /* do not count this one, since it comes from add and would +  * have been a copy normally. +  */    memcpy( io->stash.ptr, io_read_pointer( io ), io_len(io) ); -  +  }    io->buffer = io->stash.ptr;    io->len = io_len(io);    io->offset = 0;    io->allocated = io->stash.len;    io->malloced = 1;    }    else    free( io->stash.ptr );    io->stash.ptr = 0;    io->stash.len = 0; -  +  return io->malloced;    }       static void io_stash_malloc( IOBuffer *io )    {    if( io->malloced )    {    io->stash.ptr = io->buffer;    io->stash.len = io->allocated;    io->malloced = 0;    io->buffer = 0;    io->offset = 0;    }    }       static void io_ensure_malloced( IOBuffer *io, int bytes )    {    if( UNLIKELY(!io->malloced) )    {    /* convert to malloced buffer from a shared one. */    unsigned char *old = io->buffer; -  +  if( !io_unstash_malloc(io) ) +  {    io->buffer = xalloc( io->len + bytes + 100 );    io->allocated = io->len + bytes + 100;    io->num_malloc++; -  io->num_move++; +     memcpy( io->buffer, old, io->len );    if( io->sub ) {    io_unlock( get_storage(io->sub,IOBuffer_program ) );    free_object( io->sub );    }    if( io->source ) free_object( io->source );    if( io->str ) free_string( io->str );    io->source = 0;    io->sub = 0;    io->str = 0;    io->malloced = 1;    }    } -  +  }       static unsigned char *io_add_space( IOBuffer *io, int bytes, int force )    {    io_ensure_unlocked(io); -  io_unstash_malloc(io); +     io_ensure_malloced(io, bytes);       /*    * It is actually not certain that checking this is a good idea.    *    * The reason being that if the current buffer size is very small    * (io_len(io)) and the bytes added is large and there is an    * offset, it makes sense to move now when we do not have to copy    * as much.    *
pike.git/src/modules/_Stdio/buffer.cmod:233:       || (io_len(io)+bytes < io->allocated    && io->len+bytes >= io->allocated)       */       if( LIKELY(!io->locked_move) )    {    if( io->len == io->offset )    io->offset = io->len = 0; -  if( UNLIKELY((force && io->offset) || (io->offset > io->len>>1)) ) +  else if( UNLIKELY((force && io->offset) || (io->offset > io->len>>1)) )    {    memmove( io->buffer, io_read_pointer(io), io_len(io) );    io->num_move++;    io->len -= io->offset;    io->offset = 0;    }    }       if( UNLIKELY(io->len + bytes > io->allocated) )    {
pike.git/src/modules/_Stdio/buffer.cmod:372:    }       static void io_unwrite_on_error( IOBuffer *io, ONERROR *x )    {    struct rewind_to *rew = xalloc( sizeof( struct rewind_to ) );    rew->io = io;    rew->rewind_to = io->len;    SET_ONERROR( (*x), io_do_unwrite_on_error, rew );    }    -  static void io_unset_unwrite_on_error( IOBuffer *io, ONERROR *x ) +  static void io_unset_unwrite_on_error( IOBuffer *UNUSED(io), ONERROR *x )    {    UNSET_ONERROR( (*x) );    free( x->arg );    }       static void io_trigger_output( IOBuffer *io )    {    if( io->output && !io->output_triggered )    {    struct my_file *fd;
pike.git/src/modules/_Stdio/buffer.cmod:748:    struct object *x = p->u.object;    union {    IOBuffer *io;    struct string_builder *b;    struct sysmem *s;    } src;       if( (src.io = get_storage(x, IOBuffer_program)) )    {    io_append( io, io_read_pointer(src.io), io_len(src.io) ); -  io_consume( src.io, io_len(src.io) ); +  /* io_consume( src.io, io_len(src.io) );*/    }    else if( (src.b = string_buffer( x )) )    {    if( src.b->s->size_shift )    Pike_error("Only string(0..255) supported\n");    io_append( io, src.b->s->str, src.b->s->len );    }    else if( (src.s = system_memory( x )) )    {    if( !io->buffer )