shuf: do not use strings for -i RANGE case
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 7 Mar 2014 13:32:39 +0000 (14:32 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 7 Mar 2014 13:32:39 +0000 (14:32 +0100)
function                                             old     new   delta
shuf_main                                            482     496     +14

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
coreutils/shuf.c

index e0c2fbf1f9dfa4f1a776836b1666443de20b23e7..d1cd39db7586259f176b2ea1469130b18ad1a752 100644 (file)
@@ -79,7 +79,6 @@ int shuf_main(int argc, char **argv)
        /* Prepare lines for shuffling - either: */
        if (opts & OPT_e) {
                /* make lines from command-line arguments */
-
                numlines = argc;
                lines = argv;
        } else
@@ -103,7 +102,7 @@ int shuf_main(int argc, char **argv)
                numlines = (hi+1) - lo;
                lines = xmalloc(numlines * sizeof(lines[0]));
                for (i = 0; i < numlines; i++) {
-                       lines[i] = xstrdup(utoa(lo));
+                       lines[i] = (char*)(uintptr_t)lo;
                        lo++;
                }
        } else {
@@ -144,7 +143,10 @@ int shuf_main(int argc, char **argv)
                eol = '\0';
 
        for (i = 0; i < numlines; i++) {
-               printf("%s%c", lines[i], eol);
+               if (opts & OPT_i)
+                       printf("%u%c", (unsigned)(uintptr_t)lines[i], eol);
+               else
+                       printf("%s%c", lines[i], eol);
        }
 
        fflush_stdout_and_exit(EXIT_SUCCESS);