From 2eed25f2edd0c6bb7cd56b71ee4e223987d29464 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sun, 3 Dec 2000 20:37:18 +0000 Subject: add instrumentation to detect some UMRs --- src/tail.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/tail.c b/src/tail.c index 1ab9a8f3a..9952850e9 100644 --- a/src/tail.c +++ b/src/tail.c @@ -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]; -- cgit v1.2.3