Changed bb_regcomp to xregcomp and #if 0'ed out destroy_cmd_strs in sed.c
[oweals/busybox.git] / utility.c
index a15ae68dafd56e7789916783f369f4a6ac38bcfa..61f67618d80cad705bd1a84636b2b613b3bb0b26 100644 (file)
--- a/utility.c
+++ b/utility.c
@@ -53,7 +53,7 @@
 
 #if defined BB_FEATURE_MOUNT_LOOP
 #include <fcntl.h>
-#include <linux/loop.h>
+#include <linux/loop.h> /* Pull in loop device support */
 #endif
 
 /* Busybox mount uses either /proc/filesystems or /dev/mtab to get the 
@@ -94,6 +94,7 @@ extern void errorMsg(const char *s, ...)
 
        va_start(p, s);
        fflush(stdout);
+       fprintf(stderr, "%s: ", applet_name);
        vfprintf(stderr, s, p);
        va_end(p);
        fflush(stderr);
@@ -105,6 +106,7 @@ extern void fatalError(const char *s, ...)
 
        va_start(p, s);
        fflush(stdout);
+       fprintf(stderr, "%s: ", applet_name);
        vfprintf(stderr, s, p);
        va_end(p);
        fflush(stderr);
@@ -133,14 +135,10 @@ extern int get_kernel_revision(void)
 
 
 #if defined BB_FREE || defined BB_INIT || defined BB_UNAME || defined BB_UPTIME
-#include <sys/syscall.h>
-#include <linux/unistd.h>
 _syscall1(int, sysinfo, struct sysinfo *, info);
 #endif                                                 /* BB_INIT */
 
 #if defined BB_MOUNT || defined BB_UMOUNT
-#include <sys/syscall.h>
-#include <linux/unistd.h>
 
 #ifndef __NR_umount2
 #define __NR_umount2           52
@@ -1304,7 +1302,7 @@ extern int device_open(char *device, int mode)
 
 #if defined BB_KILLALL || ( defined BB_FEATURE_LINUXRC && ( defined BB_HALT || defined BB_REBOOT || defined BB_POWEROFF ))
 #ifdef BB_FEATURE_USE_DEVPS_PATCH
-#include <linux/devps.h>
+#include <linux/devps.h> /* For Erik's nifty devps device driver */
 #endif
 
 #if defined BB_FEATURE_USE_DEVPS_PATCH
@@ -1364,7 +1362,7 @@ extern pid_t* findPidByName( char* pidName)
                                && (strlen(pidName) == strlen(info.command_line))) {
                        pidList=realloc( pidList, sizeof(pid_t) * (j+2));
                        if (pidList==NULL)
-                               fatalError(memory_exhausted, "");
+                               fatalError(memory_exhausted);
                        pidList[j++]=info.pid;
                }
        }
@@ -1437,7 +1435,7 @@ extern pid_t* findPidByName( char* pidName)
                                && (strlen(pidName) == strlen(p))) {
                        pidList=realloc( pidList, sizeof(pid_t) * (i+2));
                        if (pidList==NULL)
-                               fatalError(memory_exhausted, "");
+                               fatalError(memory_exhausted);
                        pidList[i++]=strtol(next->d_name, NULL, 0);
                }
        }
@@ -1454,10 +1452,40 @@ extern void *xmalloc(size_t size)
        void *cp = malloc(size);
 
        if (cp == NULL)
-               fatalError(memory_exhausted, "");
+               fatalError(memory_exhausted);
        return cp;
 }
 
+#if defined BB_FEATURE_NFSMOUNT
+extern char * xstrdup (const char *s) {
+       char *t;
+
+       if (s == NULL)
+               return NULL;
+
+       t = strdup (s);
+
+       if (t == NULL)
+               fatalError(memory_exhausted);
+
+       return t;
+}
+
+extern char * xstrndup (const char *s, int n) {
+       char *t;
+
+       if (s == NULL)
+               fatalError("xstrndup bug");
+
+       t = xmalloc(n+1);
+       strncpy(t,s,n);
+       t[n] = 0;
+
+       return t;
+}
+#endif
+
+
 #if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT)
 extern int vdprintf(int d, const char *format, va_list ap)
 {
@@ -1599,13 +1627,14 @@ extern int find_real_root_device_name(char* name)
 }
 #endif
 
-static const int GROWBY = 80; /* how large we will grow strings by */
 
 /* get_line_from_file() - This function reads an entire line from a text file
  * up to a newline. It returns a malloc'ed char * which must be stored and
  * free'ed  by the caller. */
 extern char *get_line_from_file(FILE *file)
 {
+       static const int GROWBY = 80; /* how large we will grow strings by */
+
        int ch;
        int idx = 0;
        char *linebuf = NULL;
@@ -1675,6 +1704,36 @@ char process_escape_sequence(char **ptr)
 }
 #endif
 
+#if defined BB_BASENAME || defined BB_LN
+char *get_last_path_component(char *path)
+{
+       char *s=path+strlen(path)-1;
+
+       /* strip trailing slashes */
+       while (s && *s == '/') {
+               *s-- = '\0';
+       }
+
+       /* find last component */
+       s = strrchr(path, '/');
+       if (s==NULL) return path;
+       else return s+1;
+}
+#endif
+
+#if defined BB_GREP || defined BB_SED
+void xregcomp(regex_t *preg, const char *regex, int cflags)
+{
+       int ret;
+       if ((ret = regcomp(preg, regex, cflags)) != 0) {
+               int errmsgsz = regerror(ret, preg, NULL, 0);
+               char *errmsg = xmalloc(errmsgsz);
+               regerror(ret, preg, errmsg, errmsgsz);
+               fatalError("bb_regcomp: %s\n", errmsg);
+       }
+}
+#endif
+
 /* END CODE */
 /*
 Local Variables: