Changeset 1527


Ignore:
Timestamp:
Dec 29, 2006, 6:49:11 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • Factored regex matching stuff.
Location:
zzuf/trunk/src
Files:
6 edited

Legend:

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

    r1523 r1527  
    2727#include <errno.h>
    2828#include <stdarg.h>
    29 #include <regex.h>
    3029
    3130#include "debug.h"
  • zzuf/trunk/src/fuzz.c

    r1524 r1527  
    2626#include <stdio.h>
    2727#include <string.h>
    28 #include <regex.h>
    2928
    3029#include "libzzuf.h"
  • zzuf/trunk/src/libzzuf.c

    r1526 r1527  
    4343int   _zz_seed     = 0;
    4444float _zz_ratio    = 0.004f;
    45 regex_t * _zz_include = NULL;
    46 regex_t * _zz_exclude = NULL;
     45
     46/* Local variables */
     47static regex_t * re_include = NULL;
     48static regex_t * re_exclude = NULL;
     49
     50/* Local prototypes */
     51static void _zz_fd_init(void);
     52static void _zz_fd_fini(void);
    4753
    4854/* Library initialisation shit */
     
    7076    if(tmp && *tmp)
    7177    {
    72         _zz_include = malloc(sizeof(*_zz_include));
    73         regcomp(_zz_include, tmp, 0);
     78        re_include = malloc(sizeof(*re_include));
     79        regcomp(re_include, tmp, 0);
    7480    }
    7581
     
    7783    if(tmp && *tmp)
    7884    {
    79         _zz_exclude = malloc(sizeof(*_zz_exclude));
    80         regcomp(_zz_exclude, tmp, 0);
     85        re_exclude = malloc(sizeof(*re_exclude));
     86        regcomp(re_exclude, tmp, 0);
    8187    }
    8288
     
    114120static int maxfd, nfiles;
    115121
    116 void _zz_fd_init(void)
     122static void _zz_fd_init(void)
    117123{
    118124    files = NULL;
     
    125131}
    126132
    127 void _zz_fd_fini(void)
     133static void _zz_fd_fini(void)
    128134{
    129135    int i;
     
    142148}
    143149
    144 int _zz_ismanaged(int fd)
     150int _zz_mustwatch(char const *file)
     151{
     152    if(re_include && regexec(re_include, file, 0, NULL, 0) == REG_NOMATCH)
     153        return 0; /* not included: ignore */
     154
     155    if(re_exclude && regexec(re_exclude, file, 0, NULL, 0) != REG_NOMATCH)
     156        return 0; /* excluded: ignore */
     157
     158    return 1; /* default */
     159}
     160
     161int _zz_iswatched(int fd)
    145162{
    146163    if(fd < 0 || fd >= maxfd || fds[fd] == -1)
  • zzuf/trunk/src/libzzuf.h

    r1524 r1527  
    3434extern int       _zz_seed;
    3535extern float     _zz_ratio;
    36 extern regex_t * _zz_include;
    37 extern regex_t * _zz_exclude;
    3836
    3937/* Library initialisation shit */
     
    4240
    4341/* File descriptor handling */
    44 extern void _zz_fd_init(void);
    45 extern void _zz_fd_fini(void);
    46 extern int _zz_ismanaged(int);
     42extern int _zz_mustwatch(char const *);
     43extern int _zz_iswatched(int);
    4744extern void _zz_register(int);
    4845extern void _zz_unregister(int);
  • zzuf/trunk/src/load-fd.c

    r1524 r1527  
    3030#endif
    3131#include <stdlib.h>
    32 #include <regex.h>
    3332#include <dlfcn.h>
    3433
     
    8281            return ret; \
    8382        if(ret >= 0 \
    84             && ((oflag & (O_RDONLY | O_RDWR | O_WRONLY)) != O_WRONLY)) \
     83            && ((oflag & (O_RDONLY | O_RDWR | O_WRONLY)) != O_WRONLY) \
     84            && _zz_mustwatch(file)) \
    8585        { \
    86             if(_zz_include && \
    87                 regexec(_zz_include, file, 0, NULL, 0) == REG_NOMATCH) \
    88                 /* not included: ignore */ ; \
    89             else if(_zz_exclude && \
    90                     regexec(_zz_exclude, file, 0, NULL, 0) != REG_NOMATCH) \
    91                 /* excluded: ignore */ ; \
     86            if(oflag & O_CREAT) \
     87                debug(STR(fn) "(\"%s\", %i, %i) = %i", \
     88                      file, oflag, mode, ret); \
    9289            else \
    93             { \
    94                 if(oflag & O_CREAT) \
    95                     debug(STR(fn) "(\"%s\", %i, %i) = %i", \
    96                           file, oflag, mode, ret); \
    97                 else \
    98                     debug(STR(fn) "(\"%s\", %i) = %i", file, oflag, ret); \
    99                 _zz_register(ret); \
    100             } \
     90                debug(STR(fn) "(\"%s\", %i) = %i", file, oflag, ret); \
     91            _zz_register(ret); \
    10192        } \
    10293    } while(0)
     
    119110        LOADSYM(read);
    120111    ret = read_orig(fd, buf, count);
    121     if(!_zz_ready || !_zz_ismanaged(fd))
     112    if(!_zz_ready || !_zz_iswatched(fd))
    122113        return ret;
    123114
     
    141132            LOADSYM(fn); \
    142133        ret = ORIG(fn)(fd, offset, whence); \
    143         if(!_zz_ready || !_zz_ismanaged(fd)) \
     134        if(!_zz_ready || !_zz_iswatched(fd)) \
    144135            return ret; \
    145136        debug(STR(fn)"(%i, %lli, %i) = %lli", \
     
    170161        LOADSYM(close);
    171162    ret = close_orig(fd);
    172     if(!_zz_ready || !_zz_ismanaged(fd))
     163    if(!_zz_ready || !_zz_iswatched(fd))
    173164        return ret;
    174165
  • zzuf/trunk/src/load-stream.c

    r1524 r1527  
    2727#endif
    2828#include <stdlib.h>
    29 #include <regex.h>
    3029#include <dlfcn.h>
    3130
     
    8382        } \
    8483        ret = ORIG(fn)(path, mode); \
    85         if(ret) \
     84        if(ret && _zz_mustwatch(path)) \
    8685        { \
    87             if(_zz_include && \
    88                 regexec(_zz_include, path, 0, NULL, 0) == REG_NOMATCH) \
    89                 /* not included: ignore */ ; \
    90             else if(_zz_exclude && \
    91                     regexec(_zz_exclude, path, 0, NULL, 0) != REG_NOMATCH) \
    92                 /* excluded: ignore */ ; \
    93             else \
    94             { \
    95                 int fd = fileno(ret); \
    96                 _zz_register(fd); \
    97                 debug(STR(fn) "(\"%s\", \"%s\") = %p", path, mode, ret); \
    98             } \
     86            int fd = fileno(ret); \
     87            _zz_register(fd); \
     88            debug(STR(fn) "(\"%s\", \"%s\") = %p", path, mode, ret); \
    9989        } \
    10090    } while(0)
     
    117107        LOADSYM(fseek);
    118108    fd = fileno(stream);
    119     if(!_zz_ready || !_zz_ismanaged(fd))
     109    if(!_zz_ready || !_zz_iswatched(fd))
    120110        return fseek_orig(stream, offset, whence);
    121111
     
    149139        LOADSYM(fread);
    150140    fd = fileno(stream);
    151     if(!_zz_ready || !_zz_ismanaged(fd))
     141    if(!_zz_ready || !_zz_iswatched(fd))
    152142        return fread_orig(ptr, size, nmemb, stream);
    153143
     
    173163            LOADSYM(fn); \
    174164        fd = fileno(stream); \
    175         if(!_zz_ready || !_zz_ismanaged(fd)) \
     165        if(!_zz_ready || !_zz_iswatched(fd)) \
    176166            return ORIG(fn)(stream); \
    177167        ret = ORIG(fn)(stream); \
     
    204194        LOADSYM(fgets);
    205195    fd = fileno(stream);
    206     if(!_zz_ready || !_zz_ismanaged(fd))
     196    if(!_zz_ready || !_zz_iswatched(fd))
    207197        return fgets_orig(s, size, stream);
    208198
     
    247237        LOADSYM(ungetc);
    248238    fd = fileno(stream);
    249     if(!_zz_ready || !_zz_ismanaged(fd))
     239    if(!_zz_ready || !_zz_iswatched(fd))
    250240        return ungetc_orig(c, stream);
    251241
     
    268258        LOADSYM(fclose);
    269259    fd = fileno(fp);
    270     if(!_zz_ready || !_zz_ismanaged(fd))
     260    if(!_zz_ready || !_zz_iswatched(fd))
    271261        return fclose_orig(fp);
    272262
     
    286276            LOADSYM(fn); \
    287277        fd = fileno(stream); \
    288         if(!_zz_ready || !_zz_ismanaged(fd)) \
     278        if(!_zz_ready || !_zz_iswatched(fd)) \
    289279            return getdelim_orig(lineptr, n, delim, stream); \
    290280        line = *lineptr; \
Note: See TracChangeset for help on using the changeset viewer.