usage.c: remove reference to busybox.h
[oweals/busybox.git] / libbb / dump.c
index 9337ca63a95b64671d2a103c20eb8f338e54866a..f078afc1cb818284957c403350f7b9b3a237db64 100644 (file)
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
 /*
  * Support code for the hexdump and od applets,
  * based on code from util-linux v 2.11l
  * Original copyright notice is retained at the end of this file.
  */
 
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <ctype.h>             /* for isdigit() */
 #include "libbb.h"
 #include "dump.h"
 
@@ -38,9 +35,9 @@ static const char lcc[] = "diouxX";
 
 int bb_dump_size(FS * fs)
 {
-       register FU *fu;
-       register int bcnt, cur_size;
-       register char *fmt;
+       FU *fu;
+       int bcnt, cur_size;
+       char *fmt;
        const char *p;
        int prec;
 
@@ -77,15 +74,15 @@ int bb_dump_size(FS * fs)
                }
                cur_size += bcnt * fu->reps;
        }
-       return (cur_size);
+       return cur_size;
 }
 
 static void rewrite(FS * fs)
 {
        enum { NOTOKAY, USEBCNT, USEPREC } sokay;
-       register PR *pr, **nextpr = NULL;
-       register FU *fu;
-       register char *p1, *p2, *p3;
+       PR *pr, **nextpr = NULL;
+       FU *fu;
+       char *p1, *p2, *p3;
        char savech, *fmtp;
        const char *byte_count_str;
        int nconv, prec = 0;
@@ -98,7 +95,7 @@ static void rewrite(FS * fs)
                for (nconv = 0, fmtp = fu->fmt; *fmtp; nextpr = &pr->nextpr) {
                        /* NOSTRICT */
                        /* DBU:[dvae@cray.com] calloc so that forward ptrs start out NULL*/
-                       pr = (PR *) xcalloc(1,sizeof(PR));
+                       pr = xzalloc(sizeof(PR));
                        if (!fu->nextpr)
                                fu->nextpr = pr;
                        /* ignore nextpr -- its unused inside the loop and is
@@ -156,7 +153,7 @@ static void rewrite(FS * fs)
                                }
                                /* Unlike the original, output the remainder of the format string. */
                                if (!*byte_count_str) {
-                                       bb_error_msg_and_die("bad byte count for conversion character %s.", p1);
+                                       bb_error_msg_and_die("bad byte count for conversion character %s", p1);
                                }
                                pr->bcnt = *byte_count_str;
                        } else if (*p1 == 'l') {
@@ -189,7 +186,7 @@ static void rewrite(FS * fs)
                                } else if (sokay == USEPREC) {
                                        pr->bcnt = prec;
                                } else {        /* NOTOKAY */
-                                       bb_error_msg_and_die("%%s requires a precision or a byte count.");
+                                       bb_error_msg_and_die("%%s requires a precision or a byte count");
                                }
                        } else if (*p1 == '_') {
                                ++p2;
@@ -223,7 +220,7 @@ static void rewrite(FS * fs)
                                }
                        } else {
                        DO_BAD_CONV_CHAR:
-                               bb_error_msg_and_die("bad conversion character %%%s.\n", p1);
+                               bb_error_msg_and_die("bad conversion character %%%s", p1);
                        }
 
                        /*
@@ -232,7 +229,7 @@ static void rewrite(FS * fs)
                         */
                        savech = *p2;
                        p1[1] = '\0';
-                       pr->fmt = bb_xstrdup(fmtp);
+                       pr->fmt = xstrdup(fmtp);
                        *p2 = savech;
                        pr->cchar = pr->fmt + (p1 - fmtp);
 
@@ -246,8 +243,7 @@ static void rewrite(FS * fs)
                        {
                                savech = *p3;
                                *p3 = '\0';
-                               if (!(pr->fmt = realloc(pr->fmt, strlen(pr->fmt)+(p3-p2)+1)))
-                                       bb_perror_msg_and_die("hexdump");
+                               pr->fmt = xrealloc(pr->fmt, strlen(pr->fmt)+(p3-p2)+1);
                                strcat(pr->fmt, p2);
                                *p3 = savech;
                                p2 = p3;
@@ -257,7 +253,7 @@ static void rewrite(FS * fs)
 
                        /* only one conversion character if byte count */
                        if (!(pr->flags & F_ADDRESS) && fu->bcnt && nconv++) {
-                               bb_error_msg_and_die("byte count with multiple conversion characters.\n");
+                               bb_error_msg_and_die("byte count with multiple conversion characters");
                        }
                }
                /*
@@ -295,7 +291,7 @@ static void rewrite(FS * fs)
        }
 }
 
-static void do_skip(char *fname, int statok)
+static void do_skip(const char *fname, int statok)
 {
        struct stat sbuf;
 
@@ -326,7 +322,7 @@ static int next(char **argv)
 
        if (argv) {
                _argv = argv;
-               return (1);
+               return 1;
        }
        for (;;) {
                if (*_argv) {
@@ -339,7 +335,7 @@ static int next(char **argv)
                        statok = done = 1;
                } else {
                        if (done++)
-                               return (0);
+                               return 0;
                        statok = 0;
                }
                if (bb_dump_skip)
@@ -347,7 +343,7 @@ static int next(char **argv)
                if (*_argv)
                        ++_argv;
                if (!bb_dump_skip)
-                       return (1);
+                       return 1;
        }
        /* NOTREACHED */
 }
@@ -356,14 +352,14 @@ static unsigned char *get(void)
 {
        static int ateof = 1;
        static unsigned char *curp=NULL, *savp; /*DBU:[dave@cray.com]initialize curp */
-       register int n;
+       int n;
        int need, nread;
        unsigned char *tmpp;
 
        if (!curp) {
                address = (off_t)0; /*DBU:[dave@cray.com] initialize,initialize..*/
-               curp = (unsigned char *) xmalloc(bb_dump_blocksize);
-               savp = (unsigned char *) xmalloc(bb_dump_blocksize);
+               curp = xmalloc(bb_dump_blocksize);
+               savp = xmalloc(bb_dump_blocksize);
        } else {
                tmpp = curp;
                curp = savp;
@@ -378,17 +374,17 @@ static unsigned char *get(void)
                 */
                if (!bb_dump_length || (ateof && !next((char **) NULL))) {
                        if (need == bb_dump_blocksize) {
-                               return ((unsigned char *) NULL);
+                               return NULL;
                        }
                        if (bb_dump_vflag != ALL && !memcmp(curp, savp, nread)) {
                                if (bb_dump_vflag != DUP) {
-                                       printf("*\n");
+                                       puts("*");
                                }
-                               return ((unsigned char *) NULL);
+                               return NULL;
                        }
                        memset((char *) curp + nread, 0, need);
                        eaddress = address + nread;
-                       return (curp);
+                       return curp;
                }
                n = fread((char *) curp + nread, sizeof(unsigned char),
                                  bb_dump_length == -1 ? need : MIN(bb_dump_length, need), stdin);
@@ -409,10 +405,10 @@ static unsigned char *get(void)
                                if (bb_dump_vflag == DUP || bb_dump_vflag == FIRST) {
                                        bb_dump_vflag = WAIT;
                                }
-                               return (curp);
+                               return curp;
                        }
                        if (bb_dump_vflag == WAIT) {
-                               printf("*\n");
+                               puts("*");
                        }
                        bb_dump_vflag = DUP;
                        address = savaddress += bb_dump_blocksize;
@@ -426,7 +422,7 @@ static unsigned char *get(void)
 
 static void bpad(PR * pr)
 {
-       register char *p1, *p2;
+       char *p1, *p2;
 
        /*
         * remove all conversion flags; '-' is the only one valid
@@ -435,7 +431,8 @@ static void bpad(PR * pr)
        pr->flags = F_BPAD;
        *pr->cchar = 's';
        for (p1 = pr->fmt; *p1 != '%'; ++p1);
-       for (p2 = ++p1; *p1 && strchr(" -0+#", *p1); ++p1);
+       for (p2 = ++p1; *p1 && strchr(" -0+#", *p1); ++p1)
+               if (pr->nospace) pr->nospace--;
        while ((*p2++ = *p1++) != 0);
 }
 
@@ -503,11 +500,11 @@ static void conv_u(PR * pr, unsigned char * p)
 static void display(void)
 {
 /*  extern FU *endfu; */
-       register FS *fs;
-       register FU *fu;
-       register PR *pr;
-       register int cnt;
-       register unsigned char *bp;
+       FS *fs;
+       FU *fu;
+       PR *pr;
+       int cnt;
+       unsigned char *bp;
 
        off_t saveaddress;
        unsigned char savech = 0, *savebp;
@@ -550,12 +547,12 @@ static void display(void)
 
                                                        switch (pr->bcnt) {
                                                        case 4:
-                                                               bcopy((char *) bp, (char *) &fval,
+                                                               memmove((char *) &fval, (char *) bp,
                                                                          sizeof(fval));
                                                                printf(pr->fmt, fval);
                                                                break;
                                                        case 8:
-                                                               bcopy((char *) bp, (char *) &dval,
+                                                               memmove((char *) &dval, (char *) bp,
                                                                          sizeof(dval));
                                                                printf(pr->fmt, dval);
                                                                break;
@@ -571,12 +568,12 @@ static void display(void)
                                                                printf(pr->fmt, (int) *bp);
                                                                break;
                                                        case 2:
-                                                               bcopy((char *) bp, (char *) &sval,
+                                                               memmove((char *) &sval, (char *) bp,
                                                                          sizeof(sval));
                                                                printf(pr->fmt, (int) sval);
                                                                break;
                                                        case 4:
-                                                               bcopy((char *) bp, (char *) &ival,
+                                                               memmove((char *) &ival, (char *) bp,
                                                                          sizeof(ival));
                                                                printf(pr->fmt, ival);
                                                                break;
@@ -604,12 +601,12 @@ static void display(void)
                                                                printf(pr->fmt, (unsigned int) * bp);
                                                                break;
                                                        case 2:
-                                                               bcopy((char *) bp, (char *) &sval,
+                                                               memmove((char *) &sval, (char *) bp,
                                                                          sizeof(sval));
                                                                printf(pr->fmt, (unsigned int) sval);
                                                                break;
                                                        case 4:
-                                                               bcopy((char *) bp, (char *) &ival,
+                                                               memmove((char *) &ival, (char *) bp,
                                                                          sizeof(ival));
                                                                printf(pr->fmt, ival);
                                                                break;
@@ -651,7 +648,7 @@ static void display(void)
 
 int bb_dump_dump(char **argv)
 {
-       register FS *tfs;
+       FS *tfs;
 
        /* figure out the data block bb_dump_size */
        for (bb_dump_blocksize = 0, tfs = bb_dump_fshead; tfs; tfs = tfs->nextfs) {
@@ -668,22 +665,21 @@ int bb_dump_dump(char **argv)
        next(argv);
        display();
 
-       return (exitval);
+       return exitval;
 }
 
 void bb_dump_add(const char *fmt)
 {
-       register const char *p;
-       register char *p1;
-       register char *p2;
+       const char *p;
+       char *p1;
+       char *p2;
        static FS **nextfs;
        FS *tfs;
        FU *tfu, **nextfu;
        const char *savep;
 
        /* start new linked list of format units */
-       /* NOSTRICT */
-       tfs = (FS *) xcalloc(1,sizeof(FS)); /*DBU:[dave@cray.com] start out NULL */
+       tfs = xzalloc(sizeof(FS)); /*DBU:[dave@cray.com] start out NULL */
        if (!bb_dump_fshead) {
                bb_dump_fshead = tfs;
        } else {
@@ -695,7 +691,7 @@ void bb_dump_add(const char *fmt)
        /* take the format string and break it up into format units */
        for (p = fmt;;) {
                /* bb_dump_skip leading white space */
-               p = bb_skip_whitespace(p);
+               p = skip_whitespace(p);
                if (!*p) {
                        break;
                }
@@ -703,7 +699,7 @@ void bb_dump_add(const char *fmt)
                /* allocate a new format unit and link it in */
                /* NOSTRICT */
                /* DBU:[dave@cray.com] calloc so that forward pointers start out NULL */
-               tfu = (FU *) xcalloc(1,sizeof(FU));
+               tfu = xzalloc(sizeof(FU));
                *nextfu = tfu;
                nextfu = &tfu->nextfu;
                tfu->reps = 1;
@@ -718,23 +714,25 @@ void bb_dump_add(const char *fmt)
                        tfu->reps = atoi(savep);
                        tfu->flags = F_SETREP;
                        /* bb_dump_skip trailing white space */
-                       p = bb_skip_whitespace(++p);
+                       p = skip_whitespace(++p);
                }
 
                /* bb_dump_skip slash and trailing white space */
                if (*p == '/') {
-                       p = bb_skip_whitespace(++p);
+                       p = skip_whitespace(++p);
                }
 
                /* byte count */
                if (isdigit(*p)) {
-                       for (savep = p; isdigit(*p); ++p);
+// TODO: use bb_strtou
+                       savep = p;
+                       do p++; while (isdigit(*p));
                        if (!isspace(*p)) {
                                bb_error_msg_and_die("bad format {%s}", fmt);
                        }
                        tfu->bcnt = atoi(savep);
                        /* bb_dump_skip trailing white space */
-                       p = bb_skip_whitespace(++p);
+                       p = skip_whitespace(++p);
                }
 
                /* format */