]> Zhao Yanbai Git Server - minix.git/commitdiff
sort: add -x hex sort feature back
authorBen Gras <ben@minix3.org>
Tue, 11 Dec 2012 03:43:20 +0000 (04:43 +0100)
committerBen Gras <ben@minix3.org>
Tue, 11 Dec 2012 10:59:44 +0000 (11:59 +0100)
. so unstack works again

usr.bin/sort/fields.c
usr.bin/sort/init.c
usr.bin/sort/sort.c
usr.bin/sort/sort.h

index 9533b1c70822a31eb0fa5e7089a9fd33622cd476..94cb23ca5afdf48288fbede55934aac3fb728123 100644 (file)
@@ -82,6 +82,10 @@ static u_char *enterfield(u_char *, const u_char *, struct field *, int);
 static u_char *number(u_char *, const u_char *, u_char *, u_char *, int);
 static u_char *length(u_char *, const u_char *, u_char *, u_char *, int);
 
+#ifdef __minix
+static u_char *numhex(u_char *, const u_char *, u_char *, u_char *, int);
+#endif
+
 #define DECIMAL_POINT '.'
 
 /*
@@ -205,6 +209,10 @@ enterfield(u_char *tablepos, const u_char *endkey, struct field *cur_fld,
                return length(tablepos, endkey, start, end, flags);
        if (flags & N)
                return number(tablepos, endkey, start, end, flags);
+#ifdef __minix
+       if (flags & X)
+               return numhex(tablepos, endkey, start, end, flags);
+#endif
 
        /* Bound check space - assuming nothing is skipped */
        if (tablepos + (end - start) + 1 >= endkey)
@@ -375,3 +383,18 @@ length(u_char *pos, const u_char *bufend, u_char *line, u_char *lineend,
        l = snprintf((char *)buf, sizeof(buf), "%td", lineend - line);
        return number(pos, bufend, buf, buf + l, flag);
 }
+
+#ifdef __minix
+static u_char *
+numhex(u_char *pos, const u_char *bufend, u_char *line, u_char *lineend,
+    int flag)
+{
+       u_char buf[32];
+       int64_t n = 0;
+       int l;
+       SKIP_BLANKS(line);
+       sscanf((const char *) pos, "%lx", &n);
+       l = snprintf((char *)buf, sizeof(buf), "%lld", n);
+       return number(pos, bufend, buf, buf + l, flag);
+}
+#endif
index 0ef34b339932f0b157e9c5bff56be7a9d76cd244..8884d0b4081cf934928f7fc0080af292f9f489fa 100644 (file)
@@ -233,6 +233,9 @@ optval(int desc, int tcolflag)
        case 'i': return I;
        case 'l': return L;
        case 'n': return N;
+#ifdef __minix
+       case 'x': return X;
+#endif
        case 'r': return R;
        default:  return 0;
        }
index a0d4f5f2077d10fb8dc49173434b5a04cfa48e6e..5f026daca973dbea87353778510e4b5e378f575e 100644 (file)
@@ -170,6 +170,9 @@ main(int argc, char *argv[])
                            debug_flags |= 1 << (optarg[i] & 31);
                        break;
                case 'd': case 'f': case 'i': case 'n': case 'l':
+#ifdef __minix
+               case 'x':
+#endif
                        fldtab[0].flags |= optval(ch, 0);
                        break;
                case 'H':
index 677fd452265c8543effd58ed415bc42d6a8cccf5..cac59b0ee6ea33fe020feae011d53802b10b7a88 100644 (file)
@@ -86,6 +86,9 @@
 #define        BI      0x20    /* ignore blanks in icol */
 #define        BT      0x40    /* ignore blanks in tcol */
 #define        L       0x80    /* Sort by field length */
+#ifdef __minix
+#define        X       0x100   /* Field is a hex number */
+#endif
 
 /* masks for delimiters: blanks, fields, and termination. */
 #define BLANK 1                /* ' ', '\t'; '\n' if -R is invoked */