Changeset 1581 for zzuf


Ignore:
Timestamp:
Jan 6, 2007, 9:01:15 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Implemented rewind().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/load-stream.c

    r1580 r1581  
    4242#endif
    4343static int     (*fseek_orig)   (FILE *stream, long offset, int whence);
     44static void    (*rewind_orig)  (FILE *stream);
    4445static size_t  (*fread_orig)   (void *ptr, size_t size, size_t nmemb,
    4546                                FILE *stream);
     
    7576#endif
    7677    LOADSYM(fseek);
     78    LOADSYM(rewind);
    7779    LOADSYM(fread);
    7880    LOADSYM(getc);
     
    144146        return ret;
    145147
     148    /* FIXME: check what happens when fseek()ing a pipe */
    146149    switch(whence)
    147150    {
     
    157160    }
    158161    return 0;
     162}
     163
     164void rewind(FILE *stream)
     165{
     166    int fd;
     167
     168    if(!_zz_ready)
     169        LOADSYM(rewind);
     170    fd = fileno(stream);
     171    if(!_zz_ready || !_zz_iswatched(fd))
     172    {
     173        rewind_orig(stream);
     174        return;
     175    }
     176
     177    _zz_disabled = 1;
     178    rewind_orig(stream);
     179    _zz_disabled = 0;
     180    debug("rewind([%i])", fd);
     181
     182    /* FIXME: check what happens when rewind()ing a pipe */
     183    _zz_setpos(fd, 0);
    159184}
    160185
Note: See TracChangeset for help on using the changeset viewer.