--- tail.c	2012-10-23 10:14:12.000000000 -0400
+++ tail.c	2012-12-26 18:09:07.000000000 -0500
@@ -182,6 +182,9 @@
 /* If true, count from start of file instead of end.  */
 static bool from_start;
 
+/* Does input start with the 1st line or the 0th?  */
+static int first_unit = 1;
+
 /* If true, print filename headers.  */
 static bool print_headers;
 
@@ -243,6 +246,7 @@
   {"silent", no_argument, NULL, 'q'},
   {"sleep-interval", required_argument, NULL, 's'},
   {"verbose", no_argument, NULL, 'v'},
+  {"zero", no_argument, NULL, 'z'},
   {GETOPT_HELP_OPTION_DECL},
   {GETOPT_VERSION_OPTION_DECL},
   {NULL, 0, NULL, 0}
@@ -305,6 +309,7 @@
                              With inotify and --pid=P, check process P at\n\
                              least once every N seconds.\n\
   -v, --verbose            always output headers giving file names\n\
+  -z, --zero               count input lines or bytes from zero\n\
 "), stdout);
      fputs (HELP_OPTION_DESCRIPTION, stdout);
      fputs (VERSION_OPTION_DESCRIPTION, stdout);
@@ -1918,7 +1923,7 @@
 {
   int c;
 
-  while ((c = getopt_long (argc, argv, "c:n:fFqs:v0123456789",
+  while ((c = getopt_long (argc, argv, "c:n:fFqs:vz0123456789",
                            long_options, NULL))
          != -1)
     {
@@ -2017,6 +2022,10 @@
           *header_mode = always;
           break;
 
+	case 'z':
+	  first_unit = 0;
+	  break;
+
         case_GETOPT_HELP_CHAR;
 
         case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
@@ -2116,7 +2125,7 @@
   if (from_start)
     {
       if (n_units)
-        --n_units;
+        n_units -= first_unit;
     }
 
   if (optind < argc)
