d6cdc86894ffe45f0a5bc0f7ab90c4f3208eff7f
[platform/upstream/coreutils.git] / src / tail.c
1 /* tail -- output the last part of file(s)
2    Copyright (C) 1989, 90, 91, 1995-2005 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2, or (at your option)
7    any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software Foundation,
16    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
17
18 /* Can display any amount of data, unlike the Unix version, which uses
19    a fixed size buffer and therefore can only deliver a limited number
20    of lines.
21
22    Original version by Paul Rubin <phr@ocf.berkeley.edu>.
23    Extensions by David MacKenzie <djm@gnu.ai.mit.edu>.
24    tail -f for multiple files by Ian Lance Taylor <ian@airs.com>.  */
25
26 #include <config.h>
27
28 #include <stdio.h>
29 #include <assert.h>
30 #include <getopt.h>
31 #include <sys/types.h>
32 #include <signal.h>
33
34 #include "system.h"
35 #include "argmatch.h"
36 #include "c-strtod.h"
37 #include "error.h"
38 #include "fcntl--.h"
39 #include "inttostr.h"
40 #include "posixver.h"
41 #include "quote.h"
42 #include "safe-read.h"
43 #include "xnanosleep.h"
44 #include "xstrtol.h"
45 #include "xstrtod.h"
46
47 /* The official name of this program (e.g., no `g' prefix).  */
48 #define PROGRAM_NAME "tail"
49
50 #define AUTHORS \
51   "Paul Rubin", "David MacKenzie, Ian Lance Taylor", "Jim Meyering"
52
53 #ifndef ENOSYS
54   /* Some systems don't have ENOSYS -- this should be a big enough
55      value that no valid errno value will match it.  */
56 # define ENOSYS 99999
57 #endif
58
59 /* Number of items to tail.  */
60 #define DEFAULT_N_LINES 10
61
62 /* Special values for dump_remainder's N_BYTES parameter.  */
63 #define COPY_TO_EOF UINTMAX_MAX
64 #define COPY_A_BUFFER (UINTMAX_MAX - 1)
65
66 /* FIXME: make Follow_name the default?  */
67 #define DEFAULT_FOLLOW_MODE Follow_descriptor
68
69 enum Follow_mode
70 {
71   /* Follow the name of each file: if the file is renamed, try to reopen
72      that name and track the end of the new file if/when it's recreated.
73      This is useful for tracking logs that are occasionally rotated.  */
74   Follow_name = 1,
75
76   /* Follow each descriptor obtained upon opening a file.
77      That means we'll continue to follow the end of a file even after
78      it has been renamed or unlinked.  */
79   Follow_descriptor = 2
80 };
81
82 /* On Darwin 7.7, when reading from a command-line pipe, standard
83    input is of type S_ISSOCK.  Everywhere else it's S_ISFIFO.  */
84 #define IS_PIPE_LIKE_FILE_TYPE(Mode) \
85   (S_ISFIFO (Mode) || S_ISSOCK (Mode))
86
87 /* The types of files for which tail works.  */
88 #define IS_TAILABLE_FILE_TYPE(Mode) \
89   (S_ISREG (Mode) || IS_PIPE_LIKE_FILE_TYPE (Mode) || S_ISCHR (Mode))
90
91 static char const *const follow_mode_string[] =
92 {
93   "descriptor", "name", NULL
94 };
95
96 static enum Follow_mode const follow_mode_map[] =
97 {
98   Follow_descriptor, Follow_name,
99 };
100
101 struct File_spec
102 {
103   /* The actual file name, or "-" for stdin.  */
104   char *name;
105
106   /* File descriptor on which the file is open; -1 if it's not open.  */
107   int fd;
108
109   /* Attributes of the file the last time we checked.  */
110   off_t size;
111   struct timespec mtime;
112   dev_t dev;
113   ino_t ino;
114   mode_t mode;
115
116   /* 1 if O_NONBLOCK is clear, 0 if set, -1 if not known.  */
117   int blocking;
118
119   /* The specified name initially referred to a directory or some other
120      type for which tail isn't meaningful.  Unlike for a permission problem
121      (tailable, below) once this is set, the name is not checked ever again.  */
122   bool ignore;
123
124   /* See description of DEFAULT_MAX_N_... below.  */
125   uintmax_t n_unchanged_stats;
126
127   /* A file is tailable if it exists, is readable, and is of type
128      IS_TAILABLE_FILE_TYPE.  */
129   bool tailable;
130
131   /* The value of errno seen last time we checked this file.  */
132   int errnum;
133
134 };
135
136 /* Keep trying to open a file even if it is inaccessible when tail starts
137    or if it becomes inaccessible later -- useful only with -f.  */
138 static bool reopen_inaccessible_files;
139
140 /* If true, interpret the numeric argument as the number of lines.
141    Otherwise, interpret it as the number of bytes.  */
142 static bool count_lines;
143
144 /* Whether we follow the name of each file or the file descriptor
145    that is initially associated with each name.  */
146 static enum Follow_mode follow_mode = Follow_descriptor;
147
148 /* If true, read from the ends of all specified files until killed.  */
149 static bool forever;
150
151 /* If true, count from start of file instead of end.  */
152 static bool from_start;
153
154 /* If true, print filename headers.  */
155 static bool print_headers;
156
157 /* When to print the filename banners.  */
158 enum header_mode
159 {
160   multiple_files, always, never
161 };
162
163 /* When tailing a file by name, if there have been this many consecutive
164    iterations for which the file has not changed, then open/fstat
165    the file to determine if that file name is still associated with the
166    same device/inode-number pair as before.  This option is meaningful only
167    when following by name.  --max-unchanged-stats=N  */
168 #define DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS 5
169 static uintmax_t max_n_unchanged_stats_between_opens =
170   DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS;
171
172 /* The name this program was run with.  */
173 char *program_name;
174
175 /* The process ID of the process (presumably on the current host)
176    that is writing to all followed files.  */
177 static pid_t pid;
178
179 /* True if we have ever read standard input.  */
180 static bool have_read_stdin;
181
182 /* If nonzero, skip the is-regular-file test used to determine whether
183    to use the lseek optimization.  Instead, use the more general (and
184    more expensive) code unconditionally. Intended solely for testing.  */
185 static bool presume_input_pipe;
186
187 /* For long options that have no equivalent short option, use a
188    non-character as a pseudo short option, starting with CHAR_MAX + 1.  */
189 enum
190 {
191   RETRY_OPTION = CHAR_MAX + 1,
192   ALLOW_MISSING_OPTION,   /* deprecated, FIXME: remove in late 2004 */
193   MAX_UNCHANGED_STATS_OPTION,
194   PID_OPTION,
195   PRESUME_INPUT_PIPE_OPTION,
196   LONG_FOLLOW_OPTION
197 };
198
199 static struct option const long_options[] =
200 {
201   /* FIXME: remove in 2005 --allow-missing is deprecated; use --retry instead */
202   {"allow-missing", no_argument, NULL, ALLOW_MISSING_OPTION},
203   {"bytes", required_argument, NULL, 'c'},
204   {"follow", optional_argument, NULL, LONG_FOLLOW_OPTION},
205   {"lines", required_argument, NULL, 'n'},
206   {"max-unchanged-stats", required_argument, NULL, MAX_UNCHANGED_STATS_OPTION},
207   {"pid", required_argument, NULL, PID_OPTION},
208   {"presume-input-pipe", no_argument, NULL,
209    PRESUME_INPUT_PIPE_OPTION}, /* do not document */
210   {"quiet", no_argument, NULL, 'q'},
211   {"retry", no_argument, NULL, RETRY_OPTION},
212   {"silent", no_argument, NULL, 'q'},
213   {"sleep-interval", required_argument, NULL, 's'},
214   {"verbose", no_argument, NULL, 'v'},
215   {GETOPT_HELP_OPTION_DECL},
216   {GETOPT_VERSION_OPTION_DECL},
217   {NULL, 0, NULL, 0}
218 };
219
220 void
221 usage (int status)
222 {
223   if (status != EXIT_SUCCESS)
224     fprintf (stderr, _("Try `%s --help' for more information.\n"),
225              program_name);
226   else
227     {
228       printf (_("\
229 Usage: %s [OPTION]... [FILE]...\n\
230 "),
231               program_name);
232       printf (_("\
233 Print the last %d lines of each FILE to standard output.\n\
234 With more than one FILE, precede each with a header giving the file name.\n\
235 With no FILE, or when FILE is -, read standard input.\n\
236 \n\
237 "), DEFAULT_N_LINES);
238      fputs (_("\
239 Mandatory arguments to long options are mandatory for short options too.\n\
240 "), stdout);
241      fputs (_("\
242       --retry              keep trying to open a file even if it is\n\
243                            inaccessible when tail starts or if it becomes\n\
244                            inaccessible later; useful when following by name,\n\
245                            i.e., with --follow=name\n\
246   -c, --bytes=N            output the last N bytes\n\
247 "), stdout);
248      fputs (_("\
249   -f, --follow[={name|descriptor}]\n\
250                            output appended data as the file grows;\n\
251                            -f, --follow, and --follow=descriptor are\n\
252                            equivalent\n\
253   -F                       same as --follow=name --retry\n\
254 "), stdout);
255      printf (_("\
256   -n, --lines=N            output the last N lines, instead of the last %d\n\
257       --max-unchanged-stats=N\n\
258                            with --follow=name, reopen a FILE which has not\n\
259                            changed size after N (default %d) iterations\n\
260                            to see if it has been unlinked or renamed\n\
261                            (this is the usual case of rotated log files)\n\
262 "),
263              DEFAULT_N_LINES,
264              DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS
265              );
266      fputs (_("\
267       --pid=PID            with -f, terminate after process ID, PID dies\n\
268   -q, --quiet, --silent    never output headers giving file names\n\
269   -s, --sleep-interval=S   with -f, sleep for approximately S seconds\n\
270                            (default 1.0) between iterations.\n\
271   -v, --verbose            always output headers giving file names\n\
272 "), stdout);
273      fputs (HELP_OPTION_DESCRIPTION, stdout);
274      fputs (VERSION_OPTION_DESCRIPTION, stdout);
275      fputs (_("\
276 \n\
277 If the first character of N (the number of bytes or lines) is a `+',\n\
278 print beginning with the Nth item from the start of each file, otherwise,\n\
279 print the last N items in the file.  N may have a multiplier suffix:\n\
280 b 512, k 1024, m 1024*1024.\n\
281 \n\
282 "), stdout);
283      fputs (_("\
284 With --follow (-f), tail defaults to following the file descriptor, which\n\
285 means that even if a tail'ed file is renamed, tail will continue to track\n\
286 its end.  \
287 "), stdout);
288      fputs (_("\
289 This default behavior is not desirable when you really want to\n\
290 track the actual name of the file, not the file descriptor (e.g., log\n\
291 rotation).  Use --follow=name in that case.  That causes tail to track the\n\
292 named file by reopening it periodically to see if it has been removed and\n\
293 recreated by some other program.\n\
294 "), stdout);
295       printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
296     }
297   exit (status);
298 }
299
300 static bool
301 valid_file_spec (struct File_spec const *f)
302 {
303   /* Exactly one of the following subexpressions must be true. */
304   return ((f->fd == -1) ^ (f->errnum == 0));
305 }
306
307 static char *
308 pretty_name (struct File_spec const *f)
309 {
310   return (STREQ (f->name, "-") ? "standard input" : f->name);
311 }
312
313 static void
314 xwrite_stdout (char const *buffer, size_t n_bytes)
315 {
316   if (n_bytes > 0 && fwrite (buffer, 1, n_bytes, stdout) == 0)
317     error (EXIT_FAILURE, errno, _("write error"));
318 }
319
320 /* Record a file F with descriptor FD, size SIZE, status ST, and
321    blocking status BLOCKING.  */
322
323 static void
324 record_open_fd (struct File_spec *f, int fd,
325                 off_t size, struct stat const *st,
326                 int blocking)
327 {
328   f->fd = fd;
329   f->size = size;
330   f->mtime.tv_sec = st->st_mtime;
331   f->mtime.tv_nsec = TIMESPEC_NS (st->st_mtim);
332   f->dev = st->st_dev;
333   f->ino = st->st_ino;
334   f->mode = st->st_mode;
335   f->blocking = blocking;
336   f->n_unchanged_stats = 0;
337   f->ignore = 0;
338 }
339
340 /* Close the file with descriptor FD and name FILENAME.  */
341
342 static void
343 close_fd (int fd, const char *filename)
344 {
345   if (fd != -1 && fd != STDIN_FILENO && close (fd))
346     {
347       error (0, errno, _("closing %s (fd=%d)"), filename, fd);
348     }
349 }
350
351 static void
352 write_header (const char *pretty_filename)
353 {
354   static bool first_file = true;
355
356   printf ("%s==> %s <==\n", (first_file ? "" : "\n"), pretty_filename);
357   first_file = false;
358 }
359
360 /* Read and output N_BYTES of file PRETTY_FILENAME starting at the current
361    position in FD.  If N_BYTES is COPY_TO_EOF, then copy until end of file.
362    If N_BYTES is COPY_A_BUFFER, then copy at most one buffer's worth.
363    Return the number of bytes read from the file.  */
364
365 static uintmax_t
366 dump_remainder (const char *pretty_filename, int fd, uintmax_t n_bytes)
367 {
368   uintmax_t n_written;
369   uintmax_t n_remaining = n_bytes;
370
371   n_written = 0;
372   while (1)
373     {
374       char buffer[BUFSIZ];
375       size_t n = MIN (n_remaining, BUFSIZ);
376       size_t bytes_read = safe_read (fd, buffer, n);
377       if (bytes_read == SAFE_READ_ERROR)
378         {
379           if (errno != EAGAIN)
380             error (EXIT_FAILURE, errno, _("error reading %s"),
381                    quote (pretty_filename));
382           break;
383         }
384       if (bytes_read == 0)
385         break;
386       xwrite_stdout (buffer, bytes_read);
387       n_written += bytes_read;
388       if (n_bytes != COPY_TO_EOF)
389         {
390           n_remaining -= bytes_read;
391           if (n_remaining == 0 || n_bytes == COPY_A_BUFFER)
392             break;
393         }
394     }
395
396   return n_written;
397 }
398
399 /* Call lseek with the specified arguments, where file descriptor FD
400    corresponds to the file, FILENAME.
401    Give a diagnostic and exit nonzero if lseek fails.
402    Otherwise, return the resulting offset.  */
403
404 static off_t
405 xlseek (int fd, off_t offset, int whence, char const *filename)
406 {
407   off_t new_offset = lseek (fd, offset, whence);
408   char buf[INT_BUFSIZE_BOUND (off_t)];
409   char *s;
410
411   if (0 <= new_offset)
412     return new_offset;
413
414   s = offtostr (offset, buf);
415   switch (whence)
416     {
417     case SEEK_SET:
418       error (0, errno, _("%s: cannot seek to offset %s"),
419              filename, s);
420       break;
421     case SEEK_CUR:
422       error (0, errno, _("%s: cannot seek to relative offset %s"),
423              filename, s);
424       break;
425     case SEEK_END:
426       error (0, errno, _("%s: cannot seek to end-relative offset %s"),
427              filename, s);
428       break;
429     default:
430       abort ();
431     }
432
433   exit (EXIT_FAILURE);
434 }
435
436 /* Print the last N_LINES lines from the end of file FD.
437    Go backward through the file, reading `BUFSIZ' bytes at a time (except
438    probably the first), until we hit the start of the file or have
439    read NUMBER newlines.
440    START_POS is the starting position of the read pointer for the file
441    associated with FD (may be nonzero).
442    END_POS is the file offset of EOF (one larger than offset of last byte).
443    Return true if successful.  */
444
445 static bool
446 file_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
447             off_t start_pos, off_t end_pos, uintmax_t *read_pos)
448 {
449   char buffer[BUFSIZ];
450   size_t bytes_read;
451   off_t pos = end_pos;
452
453   if (n_lines == 0)
454     return true;
455
456   /* Set `bytes_read' to the size of the last, probably partial, buffer;
457      0 < `bytes_read' <= `BUFSIZ'.  */
458   bytes_read = (pos - start_pos) % BUFSIZ;
459   if (bytes_read == 0)
460     bytes_read = BUFSIZ;
461   /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
462      reads will be on block boundaries, which might increase efficiency.  */
463   pos -= bytes_read;
464   xlseek (fd, pos, SEEK_SET, pretty_filename);
465   bytes_read = safe_read (fd, buffer, bytes_read);
466   if (bytes_read == SAFE_READ_ERROR)
467     {
468       error (0, errno, _("error reading %s"), quote (pretty_filename));
469       return false;
470     }
471   *read_pos = pos + bytes_read;
472
473   /* Count the incomplete line on files that don't end with a newline.  */
474   if (bytes_read && buffer[bytes_read - 1] != '\n')
475     --n_lines;
476
477   do
478     {
479       /* Scan backward, counting the newlines in this bufferfull.  */
480
481       size_t n = bytes_read;
482       while (n)
483         {
484           char const *nl;
485           nl = memrchr (buffer, '\n', n);
486           if (nl == NULL)
487             break;
488           n = nl - buffer;
489           if (n_lines-- == 0)
490             {
491               /* If this newline isn't the last character in the buffer,
492                  output the part that is after it.  */
493               if (n != bytes_read - 1)
494                 xwrite_stdout (nl + 1, bytes_read - (n + 1));
495               *read_pos += dump_remainder (pretty_filename, fd,
496                                            end_pos - (pos + bytes_read));
497               return true;
498             }
499         }
500
501       /* Not enough newlines in that bufferfull.  */
502       if (pos == start_pos)
503         {
504           /* Not enough lines in the file; print everything from
505              start_pos to the end.  */
506           xlseek (fd, start_pos, SEEK_SET, pretty_filename);
507           *read_pos = start_pos + dump_remainder (pretty_filename, fd,
508                                                   end_pos);
509           return true;
510         }
511       pos -= BUFSIZ;
512       xlseek (fd, pos, SEEK_SET, pretty_filename);
513
514       bytes_read = safe_read (fd, buffer, BUFSIZ);
515       if (bytes_read == SAFE_READ_ERROR)
516         {
517           error (0, errno, _("error reading %s"), quote (pretty_filename));
518           return false;
519         }
520
521       *read_pos = pos + bytes_read;
522     }
523   while (bytes_read > 0);
524
525   return true;
526 }
527
528 /* Print the last N_LINES lines from the end of the standard input,
529    open for reading as pipe FD.
530    Buffer the text as a linked list of LBUFFERs, adding them as needed.
531    Return true if successful.  */
532
533 static bool
534 pipe_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
535             uintmax_t *read_pos)
536 {
537   struct linebuffer
538   {
539     char buffer[BUFSIZ];
540     size_t nbytes;
541     size_t nlines;
542     struct linebuffer *next;
543   };
544   typedef struct linebuffer LBUFFER;
545   LBUFFER *first, *last, *tmp;
546   size_t total_lines = 0;       /* Total number of newlines in all buffers.  */
547   bool ok = true;
548   size_t n_read;                /* Size in bytes of most recent read */
549
550   first = last = xmalloc (sizeof (LBUFFER));
551   first->nbytes = first->nlines = 0;
552   first->next = NULL;
553   tmp = xmalloc (sizeof (LBUFFER));
554
555   /* Input is always read into a fresh buffer.  */
556   while (1)
557     {
558       n_read = safe_read (fd, tmp->buffer, BUFSIZ);
559       if (n_read == 0 || n_read == SAFE_READ_ERROR)
560         break;
561       tmp->nbytes = n_read;
562       *read_pos += n_read;
563       tmp->nlines = 0;
564       tmp->next = NULL;
565
566       /* Count the number of newlines just read.  */
567       {
568         char const *buffer_end = tmp->buffer + n_read;
569         char const *p = tmp->buffer;
570         while ((p = memchr (p, '\n', buffer_end - p)))
571           {
572             ++p;
573             ++tmp->nlines;
574           }
575       }
576       total_lines += tmp->nlines;
577
578       /* If there is enough room in the last buffer read, just append the new
579          one to it.  This is because when reading from a pipe, `n_read' can
580          often be very small.  */
581       if (tmp->nbytes + last->nbytes < BUFSIZ)
582         {
583           memcpy (&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
584           last->nbytes += tmp->nbytes;
585           last->nlines += tmp->nlines;
586         }
587       else
588         {
589           /* If there's not enough room, link the new buffer onto the end of
590              the list, then either free up the oldest buffer for the next
591              read if that would leave enough lines, or else malloc a new one.
592              Some compaction mechanism is possible but probably not
593              worthwhile.  */
594           last = last->next = tmp;
595           if (total_lines - first->nlines > n_lines)
596             {
597               tmp = first;
598               total_lines -= first->nlines;
599               first = first->next;
600             }
601           else
602             tmp = xmalloc (sizeof (LBUFFER));
603         }
604     }
605
606   free (tmp);
607
608   if (n_read == SAFE_READ_ERROR)
609     {
610       error (0, errno, _("error reading %s"), quote (pretty_filename));
611       ok = false;
612       goto free_lbuffers;
613     }
614
615   /* If the file is empty, then bail out.  */
616   if (last->nbytes == 0)
617     goto free_lbuffers;
618
619   /* This prevents a core dump when the pipe contains no newlines.  */
620   if (n_lines == 0)
621     goto free_lbuffers;
622
623   /* Count the incomplete line on files that don't end with a newline.  */
624   if (last->buffer[last->nbytes - 1] != '\n')
625     {
626       ++last->nlines;
627       ++total_lines;
628     }
629
630   /* Run through the list, printing lines.  First, skip over unneeded
631      buffers.  */
632   for (tmp = first; total_lines - tmp->nlines > n_lines; tmp = tmp->next)
633     total_lines -= tmp->nlines;
634
635   /* Find the correct beginning, then print the rest of the file.  */
636   {
637     char const *beg = tmp->buffer;
638     char const *buffer_end = tmp->buffer + tmp->nbytes;
639     if (total_lines > n_lines)
640       {
641         /* Skip `total_lines' - `n_lines' newlines.  We made sure that
642            `total_lines' - `n_lines' <= `tmp->nlines'.  */
643         size_t j;
644         for (j = total_lines - n_lines; j; --j)
645           {
646             beg = memchr (beg, '\n', buffer_end - beg);
647             assert (beg);
648             ++beg;
649           }
650       }
651
652     xwrite_stdout (beg, buffer_end - beg);
653   }
654
655   for (tmp = tmp->next; tmp; tmp = tmp->next)
656     xwrite_stdout (tmp->buffer, tmp->nbytes);
657
658 free_lbuffers:
659   while (first)
660     {
661       tmp = first->next;
662       free (first);
663       first = tmp;
664     }
665   return ok;
666 }
667
668 /* Print the last N_BYTES characters from the end of pipe FD.
669    This is a stripped down version of pipe_lines.
670    Return true if successful.  */
671
672 static bool
673 pipe_bytes (const char *pretty_filename, int fd, uintmax_t n_bytes,
674             uintmax_t *read_pos)
675 {
676   struct charbuffer
677   {
678     char buffer[BUFSIZ];
679     size_t nbytes;
680     struct charbuffer *next;
681   };
682   typedef struct charbuffer CBUFFER;
683   CBUFFER *first, *last, *tmp;
684   size_t i;                     /* Index into buffers.  */
685   size_t total_bytes = 0;       /* Total characters in all buffers.  */
686   bool ok = true;
687   size_t n_read;
688
689   first = last = xmalloc (sizeof (CBUFFER));
690   first->nbytes = 0;
691   first->next = NULL;
692   tmp = xmalloc (sizeof (CBUFFER));
693
694   /* Input is always read into a fresh buffer.  */
695   while (1)
696     {
697       n_read = safe_read (fd, tmp->buffer, BUFSIZ);
698       if (n_read == 0 || n_read == SAFE_READ_ERROR)
699         break;
700       *read_pos += n_read;
701       tmp->nbytes = n_read;
702       tmp->next = NULL;
703
704       total_bytes += tmp->nbytes;
705       /* If there is enough room in the last buffer read, just append the new
706          one to it.  This is because when reading from a pipe, `nbytes' can
707          often be very small.  */
708       if (tmp->nbytes + last->nbytes < BUFSIZ)
709         {
710           memcpy (&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
711           last->nbytes += tmp->nbytes;
712         }
713       else
714         {
715           /* If there's not enough room, link the new buffer onto the end of
716              the list, then either free up the oldest buffer for the next
717              read if that would leave enough characters, or else malloc a new
718              one.  Some compaction mechanism is possible but probably not
719              worthwhile.  */
720           last = last->next = tmp;
721           if (total_bytes - first->nbytes > n_bytes)
722             {
723               tmp = first;
724               total_bytes -= first->nbytes;
725               first = first->next;
726             }
727           else
728             {
729               tmp = xmalloc (sizeof (CBUFFER));
730             }
731         }
732     }
733
734   free (tmp);
735
736   if (n_read == SAFE_READ_ERROR)
737     {
738       error (0, errno, _("error reading %s"), quote (pretty_filename));
739       ok = false;
740       goto free_cbuffers;
741     }
742
743   /* Run through the list, printing characters.  First, skip over unneeded
744      buffers.  */
745   for (tmp = first; total_bytes - tmp->nbytes > n_bytes; tmp = tmp->next)
746     total_bytes -= tmp->nbytes;
747
748   /* Find the correct beginning, then print the rest of the file.
749      We made sure that `total_bytes' - `n_bytes' <= `tmp->nbytes'.  */
750   if (total_bytes > n_bytes)
751     i = total_bytes - n_bytes;
752   else
753     i = 0;
754   xwrite_stdout (&tmp->buffer[i], tmp->nbytes - i);
755
756   for (tmp = tmp->next; tmp; tmp = tmp->next)
757     xwrite_stdout (tmp->buffer, tmp->nbytes);
758
759 free_cbuffers:
760   while (first)
761     {
762       tmp = first->next;
763       free (first);
764       first = tmp;
765     }
766   return ok;
767 }
768
769 /* Skip N_BYTES characters from the start of pipe FD, and print
770    any extra characters that were read beyond that.
771    Return 1 on error, 0 if ok, -1 if EOF.  */
772
773 static int
774 start_bytes (const char *pretty_filename, int fd, uintmax_t n_bytes,
775              uintmax_t *read_pos)
776 {
777   char buffer[BUFSIZ];
778
779   while (0 < n_bytes)
780     {
781       size_t bytes_read = safe_read (fd, buffer, BUFSIZ);
782       if (bytes_read == 0)
783         return -1;
784       if (bytes_read == SAFE_READ_ERROR)
785         {
786           error (0, errno, _("error reading %s"), quote (pretty_filename));
787           return 1;
788         }
789       read_pos += bytes_read;
790       if (bytes_read <= n_bytes)
791         n_bytes -= bytes_read;
792       else
793         {
794           size_t n_remaining = bytes_read - n_bytes;
795           if (n_remaining)
796             xwrite_stdout (&buffer[n_bytes], n_remaining);
797           break;
798         }
799     }
800
801   return 0;
802 }
803
804 /* Skip N_LINES lines at the start of file or pipe FD, and print
805    any extra characters that were read beyond that.
806    Return 1 on error, 0 if ok, -1 if EOF.  */
807
808 static int
809 start_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
810              uintmax_t *read_pos)
811 {
812   if (n_lines == 0)
813     return 0;
814
815   while (1)
816     {
817       char buffer[BUFSIZ];
818       char *p = buffer;
819       size_t bytes_read = safe_read (fd, buffer, BUFSIZ);
820       char *buffer_end = buffer + bytes_read;
821       if (bytes_read == 0) /* EOF */
822         return -1;
823       if (bytes_read == SAFE_READ_ERROR) /* error */
824         {
825           error (0, errno, _("error reading %s"), quote (pretty_filename));
826           return 1;
827         }
828
829       *read_pos += bytes_read;
830
831       while ((p = memchr (p, '\n', buffer_end - p)))
832         {
833           ++p;
834           if (--n_lines == 0)
835             {
836               if (p < buffer_end)
837                 xwrite_stdout (p, buffer_end - p);
838               return 0;
839             }
840         }
841     }
842 }
843
844 /* FIXME: describe */
845
846 static void
847 recheck (struct File_spec *f, bool blocking)
848 {
849   /* open/fstat the file and announce if dev/ino have changed */
850   struct stat new_stats;
851   bool ok = true;
852   bool is_stdin = (STREQ (f->name, "-"));
853   bool was_tailable = f->tailable;
854   int prev_errnum = f->errnum;
855   bool new_file;
856   int fd = (is_stdin
857             ? STDIN_FILENO
858             : open (f->name, O_RDONLY | (blocking ? 0 : O_NONBLOCK)));
859
860   assert (valid_file_spec (f));
861
862   /* If the open fails because the file doesn't exist,
863      then mark the file as not tailable.  */
864   f->tailable = !(reopen_inaccessible_files && fd == -1);
865
866   if (fd == -1 || fstat (fd, &new_stats) < 0)
867     {
868       ok = false;
869       f->errnum = errno;
870       if (!f->tailable)
871         {
872           if (was_tailable)
873             {
874               /* FIXME-maybe: detect the case in which the file first becomes
875                  unreadable (perms), and later becomes readable again and can
876                  be seen to be the same file (dev/ino).  Otherwise, tail prints
877                  the entire contents of the file when it becomes readable.  */
878               error (0, f->errnum, _("%s has become inaccessible"),
879                      quote (pretty_name (f)));
880             }
881           else
882             {
883               /* say nothing... it's still not tailable */
884             }
885         }
886       else if (prev_errnum != errno)
887         {
888           error (0, errno, "%s", pretty_name (f));
889         }
890     }
891   else if (!IS_TAILABLE_FILE_TYPE (new_stats.st_mode))
892     {
893       ok = false;
894       f->errnum = -1;
895       error (0, 0, _("%s has been replaced with an untailable file;\
896  giving up on this name"),
897              quote (pretty_name (f)));
898       f->ignore = true;
899     }
900   else
901     {
902       f->errnum = 0;
903     }
904
905   new_file = false;
906   if (!ok)
907     {
908       close_fd (fd, pretty_name (f));
909       close_fd (f->fd, pretty_name (f));
910       f->fd = -1;
911     }
912   else if (prev_errnum && prev_errnum != ENOENT)
913     {
914       new_file = true;
915       assert (f->fd == -1);
916       error (0, 0, _("%s has become accessible"), quote (pretty_name (f)));
917     }
918   else if (f->ino != new_stats.st_ino || f->dev != new_stats.st_dev)
919     {
920       new_file = true;
921       if (f->fd == -1)
922         {
923           error (0, 0,
924                  _("%s has appeared;  following end of new file"),
925                  quote (pretty_name (f)));
926         }
927       else
928         {
929           /* Close the old one.  */
930           close_fd (f->fd, pretty_name (f));
931
932           /* File has been replaced (e.g., via log rotation) --
933              tail the new one.  */
934           error (0, 0,
935                  _("%s has been replaced;  following end of new file"),
936                  quote (pretty_name (f)));
937         }
938     }
939   else
940     {
941       if (f->fd == -1)
942         {
943           /* This happens when one iteration finds the file missing,
944              then the preceding <dev,inode> pair is reused as the
945              file is recreated.  */
946           new_file = true;
947         }
948       else
949         {
950           close_fd (fd, pretty_name (f));
951         }
952     }
953
954   if (new_file)
955     {
956       /* Start at the beginning of the file.  */
957       record_open_fd (f, fd, 0, &new_stats, (is_stdin ? -1 : blocking));
958       xlseek (fd, 0, SEEK_SET, pretty_name (f));
959     }
960 }
961
962 /* Return true if any of the N_FILES files in F are live, i.e., have
963    open file descriptors.  */
964
965 static bool
966 any_live_files (const struct File_spec *f, int n_files)
967 {
968   int i;
969
970   for (i = 0; i < n_files; i++)
971     if (0 <= f[i].fd)
972       return true;
973   return false;
974 }
975
976 /* Tail NFILES files forever, or until killed.
977    The pertinent information for each file is stored in an entry of F.
978    Loop over each of them, doing an fstat to see if they have changed size,
979    and an occasional open/fstat to see if any dev/ino pair has changed.
980    If none of them have changed size in one iteration, sleep for a
981    while and try again.  Continue until the user interrupts us.  */
982
983 static void
984 tail_forever (struct File_spec *f, int nfiles, double sleep_interval)
985 {
986   /* Use blocking I/O as an optimization, when it's easy.  */
987   bool blocking = (pid == 0 && follow_mode == Follow_descriptor
988                    && nfiles == 1 && ! S_ISREG (f[0].mode));
989   int last;
990   bool writer_is_dead = false;
991
992   last = nfiles - 1;
993
994   while (1)
995     {
996       int i;
997       bool any_input = false;
998
999       for (i = 0; i < nfiles; i++)
1000         {
1001           int fd;
1002           char const *name;
1003           mode_t mode;
1004           struct stat stats;
1005           uintmax_t bytes_read;
1006
1007           if (f[i].ignore)
1008             continue;
1009
1010           if (f[i].fd < 0)
1011             {
1012               recheck (&f[i], blocking);
1013               continue;
1014             }
1015
1016           fd = f[i].fd;
1017           name = pretty_name (&f[i]);
1018           mode = f[i].mode;
1019
1020           if (f[i].blocking != blocking)
1021             {
1022               int old_flags = fcntl (fd, F_GETFL);
1023               int new_flags = old_flags | (blocking ? 0 : O_NONBLOCK);
1024               if (old_flags < 0
1025                   || (new_flags != old_flags
1026                       && fcntl (fd, F_SETFL, new_flags) == -1))
1027                 error (EXIT_FAILURE, errno,
1028                        _("%s: cannot change nonblocking mode"), name);
1029               f[i].blocking = blocking;
1030             }
1031
1032           if (!blocking)
1033             {
1034               if (fstat (fd, &stats) != 0)
1035                 {
1036                   f[i].fd = -1;
1037                   f[i].errnum = errno;
1038                   error (0, errno, "%s", name);
1039                   continue;
1040                 }
1041
1042               if ((! S_ISREG (stats.st_mode) || f[i].size == stats.st_size)
1043                   && f[i].mtime.tv_sec == stats.st_mtime
1044                   && f[i].mtime.tv_nsec == TIMESPEC_NS (stats.st_mtim)
1045                   && f[i].mode == stats.st_mode)
1046                 {
1047                   if ((max_n_unchanged_stats_between_opens
1048                        <= f[i].n_unchanged_stats++)
1049                       && follow_mode == Follow_name)
1050                     {
1051                       recheck (&f[i], blocking);
1052                       f[i].n_unchanged_stats = 0;
1053                     }
1054                   continue;
1055                 }
1056
1057               /* This file has changed.  Print out what we can, and
1058                  then keep looping.  */
1059
1060               f[i].mtime.tv_sec = stats.st_mtime;
1061               f[i].mtime.tv_nsec = TIMESPEC_NS (stats.st_mtim);
1062               f[i].mode = stats.st_mode;
1063
1064               /* reset counter */
1065               f[i].n_unchanged_stats = 0;
1066
1067               if (S_ISREG (mode) && stats.st_size < f[i].size)
1068                 {
1069                   error (0, 0, _("%s: file truncated"), name);
1070                   last = i;
1071                   xlseek (fd, stats.st_size, SEEK_SET, name);
1072                   f[i].size = stats.st_size;
1073                   continue;
1074                 }
1075
1076               if (i != last)
1077                 {
1078                   if (print_headers)
1079                     write_header (name);
1080                   last = i;
1081                 }
1082             }
1083
1084           bytes_read = dump_remainder (name, fd,
1085                                        blocking ? COPY_A_BUFFER : COPY_TO_EOF);
1086           any_input |= (bytes_read != 0);
1087           f[i].size += bytes_read;
1088         }
1089
1090       if (! any_live_files (f, nfiles) && ! reopen_inaccessible_files)
1091         {
1092           error (0, 0, _("no files remaining"));
1093           break;
1094         }
1095
1096       if ((!any_input | blocking) && fflush (stdout) != 0)
1097         error (EXIT_FAILURE, errno, _("write error"));
1098
1099       /* If nothing was read, sleep and/or check for dead writers.  */
1100       if (!any_input)
1101         {
1102           if (writer_is_dead)
1103             break;
1104
1105           if (xnanosleep (sleep_interval))
1106             error (EXIT_FAILURE, errno, _("cannot read realtime clock"));
1107
1108           /* Once the writer is dead, read the files once more to
1109              avoid a race condition.  */
1110           writer_is_dead = (pid != 0
1111                             && kill (pid, 0) != 0
1112                             /* Handle the case in which you cannot send a
1113                                signal to the writer, so kill fails and sets
1114                                errno to EPERM.  */
1115                             && errno != EPERM);
1116         }
1117     }
1118 }
1119
1120 /* Output the last N_BYTES bytes of file FILENAME open for reading in FD.
1121    Return true if successful.  */
1122
1123 static bool
1124 tail_bytes (const char *pretty_filename, int fd, uintmax_t n_bytes,
1125             uintmax_t *read_pos)
1126 {
1127   struct stat stats;
1128
1129   if (fstat (fd, &stats))
1130     {
1131       error (0, errno, _("cannot fstat %s"), quote (pretty_filename));
1132       return false;
1133     }
1134
1135   if (from_start)
1136     {
1137       if ( ! presume_input_pipe
1138            && S_ISREG (stats.st_mode) && n_bytes <= OFF_T_MAX)
1139         {
1140           xlseek (fd, n_bytes, SEEK_CUR, pretty_filename);
1141           *read_pos += n_bytes;
1142         }
1143       else
1144         {
1145           int t = start_bytes (pretty_filename, fd, n_bytes, read_pos);
1146           if (t)
1147             return t < 0;
1148         }
1149       *read_pos += dump_remainder (pretty_filename, fd, COPY_TO_EOF);
1150     }
1151   else
1152     {
1153       if ( ! presume_input_pipe
1154            && S_ISREG (stats.st_mode) && n_bytes <= OFF_T_MAX)
1155         {
1156           off_t current_pos = xlseek (fd, 0, SEEK_CUR, pretty_filename);
1157           off_t end_pos = xlseek (fd, 0, SEEK_END, pretty_filename);
1158           off_t diff = end_pos - current_pos;
1159           /* Be careful here.  The current position may actually be
1160              beyond the end of the file.  */
1161           off_t bytes_remaining = (diff = end_pos - current_pos) < 0 ? 0 : diff;
1162           off_t nb = n_bytes;
1163
1164           if (bytes_remaining <= nb)
1165             {
1166               /* From the current position to end of file, there are no
1167                  more bytes than have been requested.  So reposition the
1168                  file pointer to the incoming current position and print
1169                  everything after that.  */
1170               *read_pos = xlseek (fd, current_pos, SEEK_SET, pretty_filename);
1171             }
1172           else
1173             {
1174               /* There are more bytes remaining than were requested.
1175                  Back up.  */
1176               *read_pos = xlseek (fd, -nb, SEEK_END, pretty_filename);
1177             }
1178           *read_pos += dump_remainder (pretty_filename, fd, n_bytes);
1179         }
1180       else
1181         return pipe_bytes (pretty_filename, fd, n_bytes, read_pos);
1182     }
1183   return true;
1184 }
1185
1186 /* Output the last N_LINES lines of file FILENAME open for reading in FD.
1187    Return true if successful.  */
1188
1189 static bool
1190 tail_lines (const char *pretty_filename, int fd, uintmax_t n_lines,
1191             uintmax_t *read_pos)
1192 {
1193   struct stat stats;
1194
1195   if (fstat (fd, &stats))
1196     {
1197       error (0, errno, _("cannot fstat %s"), quote (pretty_filename));
1198       return false;
1199     }
1200
1201   if (from_start)
1202     {
1203       int t = start_lines (pretty_filename, fd, n_lines, read_pos);
1204       if (t)
1205         return t < 0;
1206       *read_pos += dump_remainder (pretty_filename, fd, COPY_TO_EOF);
1207     }
1208   else
1209     {
1210       off_t start_pos = -1;
1211       off_t end_pos;
1212
1213       /* Use file_lines only if FD refers to a regular file for
1214          which lseek (... SEEK_END) works.  */
1215       if ( ! presume_input_pipe
1216            && S_ISREG (stats.st_mode)
1217            && (start_pos = lseek (fd, 0, SEEK_CUR)) != -1
1218            && start_pos < (end_pos = lseek (fd, 0, SEEK_END)))
1219         {
1220           *read_pos = end_pos;
1221           if (end_pos != 0
1222               && ! file_lines (pretty_filename, fd, n_lines,
1223                                start_pos, end_pos, read_pos))
1224             return false;
1225         }
1226       else
1227         {
1228           /* Under very unlikely circumstances, it is possible to reach
1229              this point after positioning the file pointer to end of file
1230              via the `lseek (...SEEK_END)' above.  In that case, reposition
1231              the file pointer back to start_pos before calling pipe_lines.  */
1232           if (start_pos != -1)
1233             xlseek (fd, start_pos, SEEK_SET, pretty_filename);
1234
1235           return pipe_lines (pretty_filename, fd, n_lines, read_pos);
1236         }
1237     }
1238   return true;
1239 }
1240
1241 /* Display the last N_UNITS units of file FILENAME, open for reading
1242    via FD.  Set *READ_POS to the position of the input stream pointer.
1243    *READ_POS is usually the number of bytes read and corresponds to an
1244    offset from the beginning of a file.  However, it may be larger than
1245    OFF_T_MAX (as for an input pipe), and may also be larger than the
1246    number of bytes read (when an input pointer is initially not at
1247    beginning of file), and may be far greater than the number of bytes
1248    actually read for an input file that is seekable.
1249    Return true if successful.  */
1250
1251 static bool
1252 tail (const char *filename, int fd, uintmax_t n_units,
1253       uintmax_t *read_pos)
1254 {
1255   *read_pos = 0;
1256   if (count_lines)
1257     return tail_lines (filename, fd, n_units, read_pos);
1258   else
1259     return tail_bytes (filename, fd, n_units, read_pos);
1260 }
1261
1262 /* Display the last N_UNITS units of the file described by F.
1263    Return true if successful.  */
1264
1265 static bool
1266 tail_file (struct File_spec *f, uintmax_t n_units)
1267 {
1268   int fd;
1269   bool ok;
1270
1271   bool is_stdin = (STREQ (f->name, "-"));
1272
1273   if (is_stdin)
1274     {
1275       have_read_stdin = true;
1276       fd = STDIN_FILENO;
1277       if (O_BINARY && ! isatty (STDIN_FILENO))
1278         freopen (NULL, "rb", stdin);
1279     }
1280   else
1281     fd = open (f->name, O_RDONLY | O_BINARY);
1282
1283   f->tailable = !(reopen_inaccessible_files && fd == -1);
1284
1285   if (fd == -1)
1286     {
1287       if (forever)
1288         {
1289           f->fd = -1;
1290           f->errnum = errno;
1291           f->ignore = false;
1292           f->ino = 0;
1293           f->dev = 0;
1294         }
1295       error (0, errno, _("cannot open %s for reading"),
1296              quote (pretty_name (f)));
1297       ok = false;
1298     }
1299   else
1300     {
1301       uintmax_t read_pos;
1302
1303       if (print_headers)
1304         write_header (pretty_name (f));
1305       ok = tail (pretty_name (f), fd, n_units, &read_pos);
1306       if (forever)
1307         {
1308           struct stat stats;
1309
1310 #if TEST_RACE_BETWEEN_FINAL_READ_AND_INITIAL_FSTAT
1311           /* Before the tail function provided `read_pos', there was
1312              a race condition described in the URL below.  This sleep
1313              call made the window big enough to exercise the problem.  */
1314           sleep (1);
1315 #endif
1316           f->errnum = ok - 1;
1317           if (fstat (fd, &stats) < 0)
1318             {
1319               ok = false;
1320               f->errnum = errno;
1321               error (0, errno, _("error reading %s"), quote (pretty_name (f)));
1322             }
1323           else if (!IS_TAILABLE_FILE_TYPE (stats.st_mode))
1324             {
1325               error (0, 0, _("%s: cannot follow end of this type of file;\
1326  giving up on this name"),
1327                      pretty_name (f));
1328               ok = false;
1329               f->errnum = -1;
1330               f->ignore = true;
1331             }
1332
1333           if (!ok)
1334             {
1335               close_fd (fd, pretty_name (f));
1336               f->fd = -1;
1337             }
1338           else
1339             {
1340               /* Note: we must use read_pos here, not stats.st_size,
1341                  to avoid a race condition described by Ken Raeburn:
1342         http://mail.gnu.org/archive/html/bug-textutils/2003-05/msg00007.html */
1343               record_open_fd (f, fd, read_pos, &stats, (is_stdin ? -1 : 1));
1344             }
1345         }
1346       else
1347         {
1348           if (!is_stdin && close (fd))
1349             {
1350               error (0, errno, _("error reading %s"), quote (pretty_name (f)));
1351               ok = false;
1352             }
1353         }
1354     }
1355
1356   return ok;
1357 }
1358
1359 /* If obsolete usage is allowed, and the command line arguments are of
1360    the obsolete form and the option string is well-formed, set
1361    *N_UNITS, the globals COUNT_LINES, FOREVER, and FROM_START, and
1362    return true.  If the command line arguments are obviously incorrect
1363    (e.g., because obsolete usage is not allowed and the arguments are
1364    incorrect for non-obsolete usage), report an error and exit.
1365    Otherwise, return false and don't modify any parameter or global
1366    variable.  */
1367
1368 static bool
1369 parse_obsolete_option (int argc, char * const *argv, uintmax_t *n_units)
1370 {
1371   const char *p = argv[1];
1372   const char *n_string;
1373   const char *n_string_end;
1374   bool obsolete_usage;
1375   int default_count = DEFAULT_N_LINES;
1376   bool t_from_start;
1377   bool t_count_lines = true;
1378   bool t_forever = false;
1379
1380   /* With the obsolete form, there is one option string and
1381      (technically) at most one file argument.  But we allow two or more
1382      by default.  */
1383   if (argc < 2)
1384     return false;
1385
1386   obsolete_usage = (posix2_version () < 200112);
1387
1388   switch (*p++)
1389     {
1390     default:
1391       return false;
1392
1393     case '+':
1394       /* Leading "+" is a file name in the non-obsolete form.  */
1395       if (!obsolete_usage)
1396         return false;
1397
1398       t_from_start = true;
1399       break;
1400
1401     case '-':
1402       /* In the non-obsolete form, "-" is standard input and "-c"
1403          requires an option-argument.  The obsolete multidigit options
1404          are supported as a GNU extension even when conforming to
1405          POSIX 1003.1-2001, so don't complain about them.  */
1406       if (!obsolete_usage && !p[p[0] == 'c'])
1407         return false;
1408
1409       t_from_start = false;
1410       break;
1411     }
1412
1413   n_string = p;
1414   while (ISDIGIT (*p))
1415     p++;
1416   n_string_end = p;
1417
1418   switch (*p)
1419     {
1420     case 'b': default_count *= 512;     /* Fall through.  */
1421     case 'c': t_count_lines = false;    /* Fall through.  */
1422     case 'l': p++; break;
1423     }
1424
1425   if (*p == 'f')
1426     {
1427       t_forever = true;
1428       ++p;
1429     }
1430
1431   if (*p)
1432     return false;
1433
1434   if (n_string == n_string_end)
1435     *n_units = default_count;
1436   else if ((xstrtoumax (n_string, NULL, 10, n_units, "b")
1437             & ~LONGINT_INVALID_SUFFIX_CHAR)
1438            != LONGINT_OK)
1439     error (EXIT_FAILURE, 0, _("number in %s is too large"), quote (argv[1]));
1440
1441   /* Set globals.  */
1442   from_start = t_from_start;
1443   count_lines = t_count_lines;
1444   forever = t_forever;
1445
1446   return true;
1447 }
1448
1449 static void
1450 parse_options (int argc, char **argv,
1451                uintmax_t *n_units, enum header_mode *header_mode,
1452                double *sleep_interval)
1453 {
1454   int c;
1455
1456   while ((c = getopt_long (argc, argv, "c:n:fFqs:v", long_options, NULL))
1457          != -1)
1458     {
1459       switch (c)
1460         {
1461         case 'F':
1462           forever = true;
1463           follow_mode = Follow_name;
1464           reopen_inaccessible_files = true;
1465           break;
1466
1467         case 'c':
1468         case 'n':
1469           count_lines = (c == 'n');
1470           if (*optarg == '+')
1471             from_start = true;
1472           else if (*optarg == '-')
1473             ++optarg;
1474
1475           {
1476             strtol_error s_err;
1477             s_err = xstrtoumax (optarg, NULL, 10, n_units, "bkm");
1478             if (s_err != LONGINT_OK)
1479               {
1480                 error (EXIT_FAILURE, 0, "%s: %s", optarg,
1481                        (c == 'n'
1482                         ? _("invalid number of lines")
1483                         : _("invalid number of bytes")));
1484               }
1485           }
1486           break;
1487
1488         case 'f':
1489         case LONG_FOLLOW_OPTION:
1490           forever = true;
1491           if (optarg == NULL)
1492             follow_mode = DEFAULT_FOLLOW_MODE;
1493           else
1494             follow_mode = XARGMATCH ("--follow", optarg,
1495                                      follow_mode_string, follow_mode_map);
1496           break;
1497
1498         case ALLOW_MISSING_OPTION:
1499           error (0, 0,
1500            _("the --allow-missing option is deprecated; use --retry instead"));
1501           /* fall through */
1502         case RETRY_OPTION:
1503           reopen_inaccessible_files = true;
1504           break;
1505
1506         case MAX_UNCHANGED_STATS_OPTION:
1507           /* --max-unchanged-stats=N */
1508           if (xstrtoumax (optarg, NULL, 10,
1509                           &max_n_unchanged_stats_between_opens,
1510                           "")
1511               != LONGINT_OK)
1512             {
1513               error (EXIT_FAILURE, 0,
1514                _("%s: invalid maximum number of unchanged stats between opens"),
1515                      optarg);
1516             }
1517           break;
1518
1519         case PID_OPTION:
1520           {
1521             strtol_error s_err;
1522             unsigned long int tmp_ulong;
1523             s_err = xstrtoul (optarg, NULL, 10, &tmp_ulong, "");
1524             if (s_err != LONGINT_OK || tmp_ulong > PID_T_MAX)
1525               {
1526                 error (EXIT_FAILURE, 0, _("%s: invalid PID"), optarg);
1527               }
1528             pid = tmp_ulong;
1529           }
1530           break;
1531
1532         case PRESUME_INPUT_PIPE_OPTION:
1533           presume_input_pipe = true;
1534           break;
1535
1536         case 'q':
1537           *header_mode = never;
1538           break;
1539
1540         case 's':
1541           {
1542             double s;
1543             if (! (xstrtod (optarg, NULL, &s, c_strtod) && 0 <= s))
1544               error (EXIT_FAILURE, 0,
1545                      _("%s: invalid number of seconds"), optarg);
1546             *sleep_interval = s;
1547           }
1548           break;
1549
1550         case 'v':
1551           *header_mode = always;
1552           break;
1553
1554         case_GETOPT_HELP_CHAR;
1555
1556         case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
1557
1558         default:
1559           usage (EXIT_FAILURE);
1560         }
1561     }
1562
1563   if (reopen_inaccessible_files && follow_mode != Follow_name)
1564     error (0, 0, _("warning: --retry is useful only when following by name"));
1565
1566   if (pid && !forever)
1567     error (0, 0,
1568            _("warning: PID ignored; --pid=PID is useful only when following"));
1569   else if (pid && kill (pid, 0) != 0 && errno == ENOSYS)
1570     {
1571       error (0, 0, _("warning: --pid=PID is not supported on this system"));
1572       pid = 0;
1573     }
1574 }
1575
1576 int
1577 main (int argc, char **argv)
1578 {
1579   enum header_mode header_mode = multiple_files;
1580   bool ok = true;
1581   /* If from_start, the number of items to skip before printing; otherwise,
1582      the number of items at the end of the file to print.  Although the type
1583      is signed, the value is never negative.  */
1584   uintmax_t n_units = DEFAULT_N_LINES;
1585   int n_files;
1586   char **file;
1587   struct File_spec *F;
1588   int i;
1589   bool obsolete_option;
1590
1591   /* The number of seconds to sleep between iterations.
1592      During one iteration, every file name or descriptor is checked to
1593      see if it has changed.  */
1594   double sleep_interval = 1.0;
1595
1596   initialize_main (&argc, &argv);
1597   program_name = argv[0];
1598   setlocale (LC_ALL, "");
1599   bindtextdomain (PACKAGE, LOCALEDIR);
1600   textdomain (PACKAGE);
1601
1602   atexit (close_stdout);
1603
1604   have_read_stdin = false;
1605
1606   count_lines = true;
1607   forever = from_start = print_headers = false;
1608   obsolete_option = parse_obsolete_option (argc, argv, &n_units);
1609   argc -= obsolete_option;
1610   argv += obsolete_option;
1611   parse_options (argc, argv, &n_units, &header_mode, &sleep_interval);
1612
1613   /* To start printing with item N_UNITS from the start of the file, skip
1614      N_UNITS - 1 items.  `tail -n +0' is actually meaningless, but for Unix
1615      compatibility it's treated the same as `tail -n +1'.  */
1616   if (from_start)
1617     {
1618       if (n_units)
1619         --n_units;
1620     }
1621
1622   if (optind < argc)
1623     {
1624       n_files = argc - optind;
1625       file = argv + optind;
1626     }
1627   else
1628     {
1629       static char *dummy_stdin = "-";
1630       n_files = 1;
1631       file = &dummy_stdin;
1632
1633       /* POSIX says that -f is ignored if no file operand is specified
1634          and standard input is a pipe.  */
1635       if (forever)
1636         {
1637           struct stat stats;
1638           if (fstat (STDIN_FILENO, &stats) == 0
1639               && IS_PIPE_LIKE_FILE_TYPE (stats.st_mode))
1640             forever = false;
1641         }
1642     }
1643
1644   {
1645     bool found_hyphen = false;
1646
1647     for (i = 0; i < n_files; i++)
1648       if (STREQ (file[i], "-"))
1649         found_hyphen = true;
1650
1651     /* When following by name, there must be a name.  */
1652     if (found_hyphen && follow_mode == Follow_name)
1653       error (EXIT_FAILURE, 0, _("cannot follow %s by name"), quote ("-"));
1654
1655     /* When following forever, warn if any file is `-'.
1656        This is only a warning, since tail's output (before a failing seek,
1657        and that from any non-stdin files) might still be useful.  */
1658     if (forever && found_hyphen && isatty (STDIN_FILENO))
1659       error (0, 0, _("warning: following standard input"
1660                      " indefinitely is ineffective"));
1661   }
1662
1663   F = xnmalloc (n_files, sizeof *F);
1664   for (i = 0; i < n_files; i++)
1665     F[i].name = file[i];
1666
1667   if (header_mode == always
1668       || (header_mode == multiple_files && n_files > 1))
1669     print_headers = true;
1670
1671   if (O_BINARY && ! isatty (STDOUT_FILENO))
1672     freopen (NULL, "wb", stdout);
1673
1674   for (i = 0; i < n_files; i++)
1675     ok &= tail_file (&F[i], n_units);
1676
1677   if (forever)
1678     tail_forever (F, n_files, sleep_interval);
1679
1680   if (have_read_stdin && close (STDIN_FILENO) < 0)
1681     error (EXIT_FAILURE, errno, "-");
1682   exit (ok ? EXIT_SUCCESS : EXIT_FAILURE);
1683 }