Add errno.h
[oweals/busybox.git] / utility.c
index fa2067af3860c7f78c9502b1202ffda3c02a19e7..81542e94f0c912c62d1b59fe072a2fbbd5ef2ff8 100644 (file)
--- a/utility.c
+++ b/utility.c
@@ -79,8 +79,7 @@ const char mtab_file[] = "/dev/mtab";
 
 extern void usage(const char *usage)
 {
-       fprintf(stderr, "%s\n\n", full_version);
-       fprintf(stderr, "Usage: %s\n", usage);
+       fprintf(stderr, "%s\n\nUsage: %s\n", full_version, usage);
        exit(EXIT_FAILURE);
 }
 
@@ -89,7 +88,6 @@ static void verror_msg(const char *s, va_list p)
        fflush(stdout);
        fprintf(stderr, "%s: ", applet_name);
        vfprintf(stderr, s, p);
-       fflush(stderr);
 }
 
 extern void error_msg(const char *s, ...)
@@ -113,14 +111,11 @@ extern void error_msg_and_die(const char *s, ...)
 
 static void vperror_msg(const char *s, va_list p)
 {
-       fflush(stdout);
-       fprintf(stderr, "%s: ", applet_name);
-       if (s && *s) {
-               vfprintf(stderr, s, p);
-               fputs(": ", stderr);
-       }
-       fprintf(stderr, "%s\n", strerror(errno));
-       fflush(stderr);
+       int err=errno;
+       if(s == 0) s = "";
+       verror_msg(s, p);
+       if (*s) s = ": ";
+       fprintf(stderr, "%s%s\n", s, strerror(err));
 }
 
 extern void perror_msg(const char *s, ...)
@@ -142,7 +137,7 @@ extern void perror_msg_and_die(const char *s, ...)
        exit(EXIT_FAILURE);
 }
 
-#if defined BB_INIT || defined BB_MKSWAP || defined BB_MOUNT
+#if defined BB_INIT || defined BB_MKSWAP || defined BB_MOUNT || defined BB_NFSMOUNT
 /* Returns kernel version encoded as major*65536 + minor*256 + patch,
  * so, for example,  to check if the kernel is greater than 2.2.11:
  *     if (get_kernel_revision() <= 2*65536+2*256+11) { <stuff> }
@@ -172,7 +167,7 @@ _syscall1(int, sysinfo, struct sysinfo *, info);
 #if defined BB_MOUNT || defined BB_UMOUNT
 
 #ifndef __NR_umount2
-#define __NR_umount2           52
+static const int __NR_umount2 = 52;
 #endif
 
 /* Include our own version of <sys/mount.h>, since libc5 doesn't
@@ -185,7 +180,7 @@ extern _syscall5(int, mount, const char *, special_file, const char *, dir,
 
 #if defined BB_INSMOD || defined BB_LSMOD
 #ifndef __NR_query_module
-#define __NR_query_module     167
+static const int __NR_query_module = 167;
 #endif
 _syscall5(int, query_module, const char *, name, int, which,
                void *, buf, size_t, bufsize, size_t*, ret);
@@ -261,7 +256,7 @@ void reset_ino_dev_hashtable(void)
 
 #endif /* BB_CP_MV || BB_DU */
 
-#if defined (BB_CP_MV) || defined (BB_DU) || defined (BB_LN)
+#if defined (BB_CP_MV) || defined (BB_DU) || defined (BB_LN) || defined (BB_DPKG_DEB)
 /*
  * Return TRUE if a fileName is a directory.
  * Nonexistant files return FALSE.
@@ -294,7 +289,7 @@ int is_directory(const char *fileName, const int followLinks, struct stat *statB
 }
 #endif
 
-#if defined (BB_AR) || defined BB_CP_MV
+#if defined BB_AR || defined BB_CP_MV
 /*
  * Copy chunksize bytes between two file descriptors
  */
@@ -530,7 +525,7 @@ const char *time_string(time_t timeVal)
 }
 #endif /* BB_TAR || BB_AR */
 
-#if defined BB_AR || defined BB_CP_MV || defined BB_DD || defined BB_NC || defined BB_TAR
+#if defined BB_DD || defined BB_NC || defined BB_TAIL || defined BB_TAR || defined BB_AR || defined BB_CP_MV
 /*
  * Write all of the supplied buffer out to a file.
  * This does multiple writes as necessary.
@@ -980,9 +975,9 @@ long my_getpwnamegid(char *name)
 #if (defined BB_CHVT) || (defined BB_DEALLOCVT) || (defined BB_SETKEYCODES)
 
 /* From <linux/kd.h> */ 
-#define KDGKBTYPE       0x4B33  /* get keyboard type */
-#define         KB_84           0x01
-#define         KB_101          0x02    /* this is what we always answer */
+static const int KDGKBTYPE = 0x4B33;  /* get keyboard type */
+static const int KB_84 = 0x01;
+static const int KB_101 = 0x02;    /* this is what we always answer */
 
 int is_a_console(int fd)
 {
@@ -1391,7 +1386,8 @@ extern void *xcalloc(size_t nmemb, size_t size)
 }
 #endif
 
-#if defined BB_FEATURE_NFSMOUNT || defined BB_LS || defined BB_SH || defined BB_WGET
+#if defined BB_NFSMOUNT || defined BB_LS || defined BB_SH || defined BB_WGET || \
+       defined BB_DPKG_DEB || defined BB_TAR
 # ifndef DMALLOC
 extern char * xstrdup (const char *s) {
        char *t;
@@ -1409,7 +1405,7 @@ extern char * xstrdup (const char *s) {
 # endif
 #endif
 
-#if defined BB_FEATURE_NFSMOUNT
+#if defined BB_NFSMOUNT
 extern char * xstrndup (const char *s, int n) {
        char *t;
 
@@ -1671,7 +1667,8 @@ char process_escape_sequence(char **ptr)
 }
 #endif
 
-#if defined BB_BASENAME || defined BB_LN || defined BB_SH || defined BB_INIT || defined BB_FEATURE_USE_PROCFS
+#if defined BB_BASENAME || defined BB_LN || defined BB_SH || defined BB_INIT || \
+       defined BB_FEATURE_USE_PROCFS || defined BB_WGET
 char *get_last_path_component(char *path)
 {
        char *s=path+strlen(path)-1;
@@ -1716,8 +1713,8 @@ FILE *wfopen(const char *path, const char *mode)
 #endif
 
 #if defined BB_HOSTNAME || defined BB_LOADACM || defined BB_MORE \
- || defined BB_SED || defined BB_SH || defined BB_UNIQ \
- || defined BB_WC || defined BB_CMP
+ || defined BB_SED || defined BB_SH || defined BB_TAR || defined BB_UNIQ \
+ || defined BB_WC || defined BB_CMP || defined BB_SORT
 FILE *xfopen(const char *path, const char *mode)
 {
        FILE *fp;
@@ -1762,7 +1759,7 @@ unsigned long parse_number(const char *numstr, struct suffix_mult *suffixes)
 }
 #endif
 
-#if defined BB_DD || defined BB_NC
+#if defined BB_DD || defined BB_NC || defined BB_TAIL
 ssize_t safe_read(int fd, void *buf, size_t count)
 {
        ssize_t n;
@@ -1775,6 +1772,27 @@ ssize_t safe_read(int fd, void *buf, size_t count)
 }
 #endif
 
+#ifdef BB_FEATURE_HUMAN_READABLE
+char *format(unsigned long val, unsigned long hr)
+{
+       static char str[10] = "\0";
+
+       if(val == 0)
+               return("0");
+       if(hr)
+               snprintf(str, 9, "%ld", val/hr);
+       else if(val >= GIGABYTE)
+               snprintf(str, 9, "%.1LfG", ((long double)(val)/GIGABYTE));
+       else if(val >= MEGABYTE)
+               snprintf(str, 9, "%.1LfM", ((long double)(val)/MEGABYTE));
+       else if(val >= KILOBYTE)
+               snprintf(str, 9, "%.1Lfk", ((long double)(val)/KILOBYTE));
+       else
+               snprintf(str, 9, "%ld", (val));
+       return(str);
+}
+#endif
+
 /* END CODE */
 /*
 Local Variables: