add instrumentation to detect some UMRs

This commit is contained in:
Jim Meyering
2000-12-03 20:37:18 +00:00
parent 1be9e19c7d
commit 2eed25f2ed
+22 -2
View File
@@ -44,6 +44,21 @@
#define AUTHORS \
"Paul Rubin, David MacKenzie, Ian Lance Taylor, and Jim Meyering"
#define MAGIC_BYTE 0xfa
#define IS_MAGIC(x) \
({ \
int _result = 0; \
unsigned char *_p = (unsigned char *) &(x); \
int _i; \
for (_i = 0; _i < sizeof(x); _i++) \
{ \
if (_p[_i] == MAGIC_BYTE) \
_result = 1; \
} \
_result; \
})
#ifndef ENOSYS
/* Some systems don't have ENOSYS -- this should be a big enough
value that no valid errno value will match it. */
@@ -725,6 +740,8 @@ recheck (struct File_spec *f)
int prev_errnum = f->errnum;
int new_file;
assert (! IS_MAGIC (f->errnum));
assert (valid_file_spec (f));
fd = (is_stdin ? STDIN_FILENO : open (f->name, O_RDONLY));
@@ -785,7 +802,8 @@ recheck (struct File_spec *f)
assert (f->fd == -1);
error (0, 0, _("`%s' has become accessible"), pretty_name (f));
}
else if (f->ino != new_stats.st_ino || f->dev != new_stats.st_dev)
else if ((assert (!IS_MAGIC (f->ino) && ! IS_MAGIC (f->dev)), 0)
|| f->ino != new_stats.st_ino || f->dev != new_stats.st_dev) /* UMR */
{
new_file = 1;
if (f->fd == -1)
@@ -877,7 +895,8 @@ tail_forever (struct File_spec *f, int nfiles)
{
struct stat stats;
if (f[i].ignore)
assert (! IS_MAGIC (f[i].ignore));
if (f[i].ignore) /* UMR */
continue;
if (f[i].fd < 0)
@@ -1554,6 +1573,7 @@ main (int argc, char **argv)
}
F = (struct File_spec *) xmalloc (n_files * sizeof (F[0]));
memset (F, MAGIC_BYTE, n_files * sizeof (F[0]));
for (i = 0; i < n_files; i++)
F[i].name = file[i];