import new upstream version rs-20140609
authortg <tg@mirbsd.org>
Mon, 9 Jun 2014 19:22:49 +0000 (19:22 +0000)
committertg <tg@mirbsd.org>
Mon, 9 Jun 2014 19:22:49 +0000 (19:22 +0000)
rs.1
rs.c

diff --git a/rs.1 b/rs.1
index bc094bd..fe7a6cf 100644 (file)
--- a/rs.1
+++ b/rs.1
@@ -1,5 +1,5 @@
-.\" $MirOS: src/usr.bin/rs/rs.1,v 1.3 2012/04/14 12:55:32 tg Exp $
-.\" $OpenBSD: rs.1,v 1.15 2009/10/15 07:38:09 sobrado Exp $
+.\" $MirOS: src/usr.bin/rs/rs.1,v 1.4 2014/06/09 18:41:40 tg Exp $
+.\" $OpenBSD: rs.1,v 1.16 2014/01/20 05:07:48 schwarze Exp $
 .\" $FreeBSD: src/usr.bin/rs/rs.1,v 1.4 1999/08/28 01:05:21 peter Exp $
 .\"-
 .\" Copyright (c) 1993
@@ -88,7 +88,7 @@
 .\" with -mandoc, it might implement .Mx itself, but we want to
 .\" use our own definition. And .Dd must come *first*, always.
 .\"
-.Dd $Mdocdate: April 14 2012 $
+.Dd $Mdocdate: June 9 2014 $
 .\"
 .\" Check which macro package we use, and do other -mdoc setup.
 .\"
@@ -301,12 +301,12 @@ number as zero unless otherwise indicated.
 .Nm
 can be used as a filter to convert the stream output
 of certain programs (e.g.,
-.Xr spell ,
-.Xr du ,
-.Xr file ,
-.Xr look ,
-.Xr nm ,
-.Xr who ,
+.Xr spell ,
+.Xr du ,
+.Xr file ,
+.Xr look ,
+.Xr nm ,
+.Xr who ,
 and
 .Xr wc 1 )
 into a convenient
diff --git a/rs.c b/rs.c
index 9a3cffb..24d2eed 100644 (file)
--- a/rs.c
+++ b/rs.c
@@ -1,6 +1,8 @@
-/*     $OpenBSD: rs.c,v 1.21 2012/03/04 04:05:15 fgsch Exp $   */
+/*     $OpenBSD: rs.c,v 1.23 2013/11/15 15:47:53 millert Exp $ */
 
 /*-
+ * Copyright (c) 2014
+ *     Thorsten Glaser <tg@mirbsd.org>
  * Copyright (c) 1993
  *     The Regents of the University of California.  All rights reserved.
  *
@@ -54,7 +56,7 @@
 extern long long strtonum(const char *, long long, long long, const char **);
 #endif
 
-__RCSID("$MirOS: src/usr.bin/rs/rs.c,v 1.8 2012/04/14 12:37:19 tg Exp $");
+__RCSID("$MirOS: src/usr.bin/rs/rs.c,v 1.11 2014/06/09 19:17:53 tg Exp $");
 
 long   flags;
 #define        TRANSPOSE       000001
@@ -156,18 +158,34 @@ getfile(void)
                        continue;
                }
                for (p = curline, endp = curline + curlen; p < endp; p++) {
-                       if (*p == isep && multisep)
-                               continue;       /* eat up column separators */
-                       if (*p == isep)         /* must be an empty column */
+                       if (*p == isep) {
+                               if (multisep)
+                                       /* eat up column separators */
+                                       goto handle_last_field;
+                               /* must be an empty column */
                                *ep = "";
-                       else                    /* store column entry */
+                       } else {
+                               /* store column entry */
                                *ep = p;
-                       while (p < endp && *p != isep)
-                               p++;            /* find end of entry */
-                       *p = '\0';              /* mark end of entry */
-                       if (maxlen < p - *ep)   /* update maxlen */
-                               maxlen = p - *ep;
-                       INCR(ep);               /* prepare for next entry */
+                               /* find end of entry */
+                               while (p < endp && *p != isep)
+                                       p++;
+                               /* update maxlen */
+                               if (maxlen < p - *ep)
+                                       maxlen = p - *ep;
+                       }
+                       /* mark end of entry */
+                       *p = '\0';
+                       /* prepare for next entry */
+                       INCR(ep);
+                       /* handle empty last field */
+ handle_last_field:
+                       if ((p + 1) == endp) {
+                               /* insert empty entry iff checked */
+                               *ep = "";
+                               INCR(ep);
+                               /* the loop will end immediately */
+                       }
                }
                irows++;                        /* update row count */
                if (nullpad) {                  /* pad missing entries */
@@ -346,17 +364,16 @@ const char **
 getptrs(const char **sp)
 {
        const char **p;
-       size_t newsize, gap;
+       size_t newsize;
 
        newsize = allocsize * 2;
        p = realloc(elem, newsize * sizeof(char *));
        if (p == NULL)
                err(1, "no memory");
 
-       gap = p - elem;
-       elem = p;
        allocsize = newsize;
-       sp += gap;
+       sp += p - elem;
+       elem = p;
        endelem = elem + allocsize;
        return(sp);
 }