a bit more IPv6-ization work
[oweals/busybox.git] / coreutils / stat.c
index 7e39d5ecdf262dca1de20be583de76fc47a1125c..31dd6624eccdfb4ba9192f00dc691d7602ab7751 100644 (file)
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <stdio.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <pwd.h>
-#include <grp.h>
-#include <sys/vfs.h>
-#include <time.h>
-#include <getopt.h> /* optind */
-#include <sys/stat.h>
-#include <sys/statfs.h>
-#include <sys/statvfs.h>
-#include <string.h>
 #include "busybox.h"
 
 /* vars to control behavior */
@@ -56,10 +44,16 @@ static char const *file_type(struct stat const *st)
 
 static char const *human_time(time_t t)
 {
+       /* Old
        static char *str;
        str = ctime(&t);
        str[strlen(str)-1] = '\0';
        return str;
+       */
+       /* coreutils 6.3 compat: */
+       static char buf[sizeof("YYYY-MM-DD HH:MM:SS.000000000")];
+       strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S.000000000", localtime(&t));
+       return buf;
 }
 
 /* Return the type of the specified file system.
@@ -321,43 +315,43 @@ static void print_it(char const *masterformat, char const *filename,
        char *b;
 
        /* create a working copy of the format string */
-       char *format = bb_xstrdup(masterformat);
+       char *format = xstrdup(masterformat);
 
-       /* Add 2 to accommodate our conversion of the stat `%s' format string
-        * to the printf `%llu' one.  */
+       /* Add 2 to accomodate our conversion of the stat '%s' format string
+        * to the printf '%llu' one.  */
        size_t n_alloc = strlen(format) + 2 + 1;
        char *dest = xmalloc(n_alloc);
 
        b = format;
        while (b) {
+               size_t len;
                char *p = strchr(b, '%');
-               if (p != NULL) {
-                       size_t len;
-                       *p++ = '\0';
-                       fputs(b, stdout);
-
-                       len = strspn(p, "#-+.I 0123456789");
-                       dest[0] = '%';
-                       memcpy(dest + 1, p, len);
-                       dest[1 + len] = 0;
-                       p += len;
-
-                       b = p + 1;
-                       switch (*p) {
-                               case '\0':
-                                       b = NULL;
-                                       /* fall through */
-                               case '%':
-                                       putchar('%');
-                                       break;
-                               default:
-                                       print_func(dest, n_alloc, *p, filename, data);
-                                       break;
-                       }
-
-               } else {
-                       fputs(b, stdout);
+               if (!p) {
+                       /* coreutils 6.3 always print <cr> at the end */
+                       /*fputs(b, stdout);*/
+                       puts(b);
+                       break;
+               }
+               *p++ = '\0';
+               fputs(b, stdout);
+
+               len = strspn(p, "#-+.I 0123456789");
+               dest[0] = '%';
+               memcpy(dest + 1, p, len);
+               dest[1 + len] = 0;
+               p += len;
+
+               b = p + 1;
+               switch (*p) {
+               case '\0':
                        b = NULL;
+                       /* fall through */
+               case '%':
+                       putchar('%');
+                       break;
+               default:
+                       print_func(dest, n_alloc, *p, filename, data);
+                       break;
                }
        }
 
@@ -384,7 +378,7 @@ static int do_statfs(char const *filename, char const *format)
                          "    ID: %-8i Namelen: %-7l Type: %T\n"
                          "Block size: %-10s\n"
                          "Blocks: Total: %-10b Free: %-10f Available: %a\n"
-                         "Inodes: Total: %-10c Free: %d\n");
+                         "Inodes: Total: %-10c Free: %d");
        print_it(format, filename, print_statfs, &statfsbuf);
 #else
 
@@ -432,7 +426,7 @@ static int do_stat(char const *filename, char const *format)
 #ifdef CONFIG_FEATURE_STAT_FORMAT
        if (format == NULL) {
                if (flags & OPT_TERSE) {
-                       format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o\n";
+                       format = "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %o";
                } else {
                        if (S_ISBLK(statbuf.st_mode) || S_ISCHR(statbuf.st_mode)) {
                                format =
@@ -528,8 +522,8 @@ int stat_main(int argc, char **argv)
        int ok = 1;
        int (*statfunc)(char const *, char const *) = do_stat;
 
-       flags = bb_getopt_ulflags(argc, argv, "ftL"
-       USE_FEATURE_STAT_FORMAT("c:", &format)
+       flags = getopt32(argc, argv, "ftL"
+               USE_FEATURE_STAT_FORMAT("c:", &format)
        );
 
        if (flags & 1)                /* -f */