* Added a _zz_disabled flag. This is needed on OS X where we protect the

fopen_orig() call because it will call our own diverted open() function
    and we don't want it to fiddle with our structures.
This commit is contained in:
Sam Hocevar
2007-01-03 22:51:36 +00:00
committed by sam
parent 5d89130fb9
commit 39a8524c0e
4 changed files with 23 additions and 5 deletions
+1
View File
@@ -39,6 +39,7 @@
/* Global variables */
int _zz_ready = 0;
int _zz_disabled = 0;
int _zz_hasdebug = 0;
float _zz_ratio = 0.004f;
int _zz_seed = 0;
+1
View File
@@ -33,6 +33,7 @@ struct fuzz
/* Internal variables */
extern int _zz_ready;
extern int _zz_disabled;
extern int _zz_hasdebug;
extern float _zz_ratio;
extern int _zz_seed;
+4 -4
View File
@@ -85,7 +85,7 @@ void _zz_load_fd(void)
{ \
ret = ORIG(fn)(file, oflag); \
} \
if(!_zz_ready) \
if(!_zz_ready || _zz_disabled) \
return ret; \
if(ret >= 0 \
&& ((oflag & (O_RDONLY | O_RDWR | O_WRONLY)) != O_WRONLY) \
@@ -119,7 +119,7 @@ ssize_t read(int fd, void *buf, size_t count)
if(!_zz_ready)
LOADSYM(read);
ret = read_orig(fd, buf, count);
if(!_zz_ready || !_zz_iswatched(fd))
if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
return ret;
debug("read(%i, %p, %li) = %i", fd, buf, (long int)count, ret);
@@ -145,7 +145,7 @@ ssize_t read(int fd, void *buf, size_t count)
if(!_zz_ready) \
LOADSYM(fn); \
ret = ORIG(fn)(fd, offset, whence); \
if(!_zz_ready || !_zz_iswatched(fd)) \
if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled) \
return ret; \
debug(STR(fn)"(%i, %lli, %i) = %lli", \
fd, (long long int)offset, whence, (long long int)ret); \
@@ -181,7 +181,7 @@ int close(int fd)
return 0;
ret = close_orig(fd);
if(!_zz_ready || !_zz_iswatched(fd))
if(!_zz_ready || !_zz_iswatched(fd) || _zz_disabled)
return ret;
debug("close(%i) = %i", fd, ret);
+17 -1
View File
@@ -95,7 +95,9 @@ void _zz_load_stream(void)
LOADSYM(fn); \
return ORIG(fn)(path, mode); \
} \
_zz_disabled = 1; \
ret = ORIG(fn)(path, mode); \
_zz_disabled = 0; \
if(ret && _zz_mustwatch(path)) \
{ \
int fd = fileno(ret); \
@@ -126,7 +128,9 @@ int fseek(FILE *stream, long offset, int whence)
if(!_zz_ready || !_zz_iswatched(fd))
return fseek_orig(stream, offset, whence);
_zz_disabled = 1;
ret = fseek_orig(stream, offset, whence);
_zz_disabled = 0;
debug("fseek([%i], %li, %i) = %i", fd, offset, whence, ret);
if(ret != 0)
return ret;
@@ -159,7 +163,9 @@ size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
return fread_orig(ptr, size, nmemb, stream);
pos = ftell(stream);
_zz_disabled = 1;
ret = fread_orig(ptr, size, nmemb, stream);
_zz_disabled = 0;
debug("fread(%p, %li, %li, [%i]) = %li",
ptr, (long int)size, (long int)nmemb, fd, (long int)ret);
if(ret >= 0)
@@ -184,7 +190,9 @@ size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
fd = fileno(stream); \
if(!_zz_ready || !_zz_iswatched(fd)) \
return ORIG(fn)(stream); \
_zz_disabled = 1; \
ret = ORIG(fn)(stream); \
_zz_disabled = 0; \
if(ret != EOF) \
{ \
uint8_t ch = ret; \
@@ -227,7 +235,11 @@ char *fgets(char *s, int size, FILE *stream)
{
for(i = 0; i < size - 1; i++)
{
int ch = fgetc_orig(stream);
int ch;
_zz_disabled = 1;
ch = fgetc_orig(stream);
_zz_disabled = 0;
if(ch == EOF)
{
@@ -286,7 +298,9 @@ int fclose(FILE *fp)
if(!_zz_ready || !_zz_iswatched(fd))
return fclose_orig(fp);
_zz_disabled = 1;
ret = fclose_orig(fp);
_zz_disabled = 0;
debug("fclose([%i]) = %i", fd, ret);
_zz_unregister(fd);
@@ -318,7 +332,9 @@ int fclose(FILE *fp)
*lineptr = line; \
break; \
} \
_zz_disabled = 1; \
ch = fgetc_orig(stream); \
_zz_disabled = 0; \
if(ch == EOF) \
{ \
finished = 1; \