Changeset 1694 for zzuf


Ignore:
Timestamp:
Jan 17, 2007, 10:52:44 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Replaced _zz_disabled with a less stinky API. Still not thread safe, does not recover very well from errors, but why care?
Location:
zzuf/trunk/src
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/fd.c

    r1684 r1694  
    4646static struct files
    4747{
    48     int managed;
     48    int managed, locked;
    4949    uint64_t pos;
    5050    /* Public stuff */
     
    5454static int *fds, static_fds[STATIC_FILES];
    5555static int maxfd, nfiles;
     56
     57/* Create lock. This lock variable is used to disable file descriptor
     58 * creation wrappers. For instance on Mac OS X, fopen() calls open()
     59 * and we don’t want open() to do any zzuf-related stuff. */
     60static int create_lock;
    5661
    5762static int32_t seed = DEFAULT_SEED;
     
    220225
    221226    files[i].managed = 1;
     227    files[i].locked = 0;
    222228    files[i].pos = 0;
    223229    files[i].fuzz.seed = seed;
     
    248254}
    249255
     256void _zz_lock(int fd)
     257{
     258    if(fd < -1 || fd >= maxfd || fds[fd] == -1)
     259        return;
     260
     261    if(fd == -1)
     262        create_lock = 1;
     263    else
     264        files[fds[fd]].locked = 1;
     265}
     266
     267void _zz_unlock(int fd)
     268{
     269    if(fd < -1 || fd >= maxfd || fds[fd] == -1)
     270        return;
     271
     272    if(fd == -1)
     273        create_lock = 0;
     274    else
     275        files[fds[fd]].locked = 0;
     276}
     277
     278int _zz_islocked(int fd)
     279{
     280    if(fd < -1 || fd >= maxfd || fds[fd] == -1)
     281        return 0;
     282
     283    if(fd == -1)
     284        return create_lock;
     285    else
     286        return files[fds[fd]].locked;
     287}
     288
    250289long int _zz_getpos(int fd)
    251290{
  • zzuf/trunk/src/fd.h

    r1672 r1694  
    3030extern void _zz_register(int);
    3131extern void _zz_unregister(int);
     32extern void _zz_lock(int);
     33extern void _zz_unlock(int);
     34extern int _zz_islocked(int);
    3235extern long int _zz_getpos(int);
    3336extern void _zz_setpos(int, long int);
  • zzuf/trunk/src/lib-fd.c

    r1693 r1694  
    100100            ret = ORIG(fn)(file, oflag); \
    101101        } \
    102         if(!_zz_ready || _zz_disabled) \
     102        if(!_zz_ready || _zz_islocked(-1)) \
    103103            return ret; \
    104104        if(ret >= 0 \
     
    133133    LOADSYM(accept);
    134134    ret = accept_orig(sockfd, addr, addrlen);
    135     if(!_zz_ready || _zz_disabled || !_zz_network)
     135    if(!_zz_ready || _zz_islocked(-1) || !_zz_network)
    136136        return ret;
    137137
     
    151151    LOADSYM(socket);
    152152    ret = socket_orig(domain, type, protocol);
    153     if(!_zz_ready || _zz_disabled || !_zz_network)
     153    if(!_zz_ready || _zz_islocked(-1) || !_zz_network)
    154154        return ret;
    155155
     
    169169    LOADSYM(recv);
    170170    ret = recv_orig(s, buf, len, flags);
    171     if(!_zz_ready || _zz_disabled || !_zz_network)
     171    if(!_zz_ready || !_zz_iswatched(s) || _zz_islocked(s))
    172172        return ret;
    173173
     
    200200    LOADSYM(recvfrom);
    201201    ret = recvfrom_orig(s, buf, len, flags, from, fromlen);
    202     if(!_zz_ready || _zz_disabled || !_zz_network)
     202    if(!_zz_ready || !_zz_iswatched(s) || _zz_islocked(s))
    203203        return ret;
    204204
     
    231231    LOADSYM(recvmsg);
    232232    ret = recvmsg_orig(s, hdr, flags);
    233     if(!_zz_ready || !_zz_iswatched(s) || _zz_disabled)
     233    if(!_zz_ready || !_zz_iswatched(s) || _zz_islocked(s))
    234234        return ret;
    235235
     
    246246    LOADSYM(read);
    247247    ret = read_orig(fd, buf, count);
    248     if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
     248    if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd))
    249249        return ret;
    250250
     
    276276    LOADSYM(readv);
    277277    ret = readv_orig(fd, iov, count);
    278     if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
     278    if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd))
    279279        return ret;
    280280
     
    292292    LOADSYM(pread);
    293293    ret = pread_orig(fd, buf, count, offset);
    294     if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
     294    if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd))
    295295        return ret;
    296296
     
    324324        LOADSYM(fn); \
    325325        ret = ORIG(fn)(fd, offset, whence); \
    326         if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled) \
     326        if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd)) \
    327327            return ret; \
    328328        debug("%s(%i, %lli, %i) = %lli", __func__, fd, \
     
    354354
    355355    LOADSYM(aio_read);
    356     if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
     356    if(!_zz_ready || !_zz_iswatched(fd))
    357357        return aio_read_orig(aiocbp);
    358358
    359     _zz_disabled = 1;
     359    _zz_lock(fd);
    360360    ret = aio_read_orig(aiocbp);
    361361
     
    377377
    378378    ret = aio_return_orig(aiocbp);
    379     _zz_disabled = 0;
     379    _zz_unlock(fd);
    380380
    381381    /* FIXME: make sure we’re actually *reading* */
     
    405405    LOADSYM(close);
    406406    ret = close_orig(fd);
    407     if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
     407    if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd))
    408408        return ret;
    409409
  • zzuf/trunk/src/lib-mem.c

    r1687 r1694  
    190190        LOADSYM(fn); \
    191191        ret = ORIG(fn)(start, length, prot, flags, fd, offset); \
    192         if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled) \
     192        if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd)) \
    193193            return ret; \
    194194        if(ret && length) \
     
    270270    LOADSYM(map_fd);
    271271    ret = map_fd_orig(fd, offset, addr, find_space, numbytes);
    272     if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
     272    if(!_zz_ready || !_zz_iswatched(fd) || _zz_islocked(fd))
    273273        return ret;
    274274
  • zzuf/trunk/src/lib-stream.c

    r1688 r1694  
    9696        if(!_zz_ready) \
    9797            return ORIG(fn)(path, mode); \
    98         _zz_disabled = 1; \
     98        _zz_lock(-1); \
    9999        ret = ORIG(fn)(path, mode); \
    100         _zz_disabled = 0; \
     100        _zz_unlock(-1); \
    101101        if(ret && _zz_mustwatch(path)) \
    102102        { \
     
    131131    }
    132132
    133     _zz_disabled = 1;
     133    _zz_lock(-1);
    134134    ret = freopen_orig(path, mode, stream);
    135     _zz_disabled = 0;
     135    _zz_unlock(-1);
    136136
    137137    if(ret && _zz_mustwatch(path))
     
    179179        if(!_zz_ready || !_zz_iswatched(fd)) \
    180180            return ORIG(fn)(stream, offset, whence); \
    181         _zz_disabled = 1; \
     181        _zz_lock(fd); \
    182182        ret = ORIG(fn)(stream, offset, whence); \
    183         _zz_disabled = 0; \
     183        _zz_unlock(fd); \
    184184        debug("%s([%i], %lli, %i) = %i", __func__, \
    185185              fd, (long long int)offset, whence, ret); \
     
    211211    }
    212212
    213     _zz_disabled = 1;
     213    _zz_lock(fd);
    214214    rewind_orig(stream);
    215     _zz_disabled = 0;
     215    _zz_unlock(fd);
    216216    debug("%s([%i])", __func__, fd);
    217217
     
    239239
    240240    pos = ftell(stream);
    241     _zz_disabled = 1;
     241    _zz_lock(fd);
    242242    ret = fread_orig(ptr, size, nmemb, stream);
    243     _zz_disabled = 0;
     243    _zz_unlock(fd);
    244244    debug("%s(%p, %li, %li, [%i]) = %li", __func__, ptr,
    245245          (long int)size, (long int)nmemb, fd, (long int)ret);
     
    284284        if(!_zz_ready || !_zz_iswatched(fd)) \
    285285            return ORIG(fn)(stream); \
    286         _zz_disabled = 1; \
     286        _zz_lock(fd); \
    287287        ret = ORIG(fn)(stream); \
    288         _zz_disabled = 0; \
     288        _zz_unlock(fd); \
    289289        FGETC_FUZZ \
    290290        debug("%s([%i]) = '%c'", __func__, fd, ret); \
     
    321321
    322322#if defined HAVE___SREFILL /* Don't fuzz or seek if we have __srefill() */
    323     _zz_disabled = 1;
     323    _zz_lock(fd);
    324324    ret = fgets_orig(s, size, stream);
    325     _zz_disabled = 0;
     325    _zz_unlock(fd);
    326326#else
    327327    if(size <= 0)
     
    337337            int ch;
    338338
    339             _zz_disabled = 1;
     339            _zz_lock(fd);
    340340            ch = fgetc_orig(stream);
    341             _zz_disabled = 0;
     341            _zz_unlock(fd);
    342342
    343343            if(ch == EOF)
     
    379379    _zz_fuzz(fd, &ch, 1);
    380380#endif
    381     _zz_disabled = 1;
     381    _zz_lock(fd);
    382382    ret = ungetc_orig((int)ch, stream);
    383     _zz_disabled = 0;
     383    _zz_unlock(fd);
    384384
    385385    if(ret >= 0)
     
    404404        return fclose_orig(fp);
    405405
    406     _zz_disabled = 1;
     406    _zz_lock(fd);
    407407    ret = fclose_orig(fp);
    408     _zz_disabled = 0;
     408    _zz_unlock(fd);
    409409    debug("%s([%i]) = %i", __func__, fd, ret);
    410410    _zz_unregister(fd);
     
    439439                break; \
    440440            } \
    441             _zz_disabled = 1; \
     441            _zz_lock(fd); \
    442442            ch = fgetc_orig(stream); \
    443             _zz_disabled = 0; \
     443            _zz_unlock(fd); \
    444444            if(ch == EOF) \
    445445            { \
     
    508508
    509509#if defined HAVE___SREFILL /* Don't fuzz or seek if we have __srefill() */
    510     _zz_disabled = 1;
     510    _zz_lock(fd);
    511511    ret = fgetln_orig(stream, len);
    512     _zz_disabled = 0;
     512    _zz_unlock(fd);
    513513#else
    514514    fuzz = _zz_getfuzz(fd);
     
    518518        int ch;
    519519
    520         _zz_disabled = 1;
     520        _zz_lock(fd);
    521521        ch = fgetc_orig(stream);
    522         _zz_disabled = 0;
     522        _zz_unlock(fd);
    523523
    524524        if(ch == EOF)
     
    556556        return __srefill_orig(fp);
    557557
    558     tmp = _zz_disabled;
    559     _zz_disabled = 1;
     558    tmp = _zz_islocked(fd);
     559    _zz_lock(fd);
    560560    ret = __srefill_orig(fp);
    561561    newpos = lseek(fd, 0, SEEK_CUR);
    562     _zz_disabled = tmp;
     562    if(!tmp)
     563        _zz_unlock(fd);
    563564    if(ret != EOF)
    564565    {
     
    569570    }
    570571
    571     if(!_zz_disabled)
     572    if(!_zz_islocked(fd))
    572573        debug("%s([%i]) = %i", __func__, fd, ret);
    573574
  • zzuf/trunk/src/libzzuf.c

    r1679 r1694  
    4242/* Global variables */
    4343int   _zz_ready    = 0;
    44 int   _zz_disabled = 0;
    4544int   _zz_hasdebug = 0;
    4645int   _zz_signal   = 0;
Note: See TracChangeset for help on using the changeset viewer.