Removed unnecessary #include "regexp.h" line from find.c as per Matt Kraai's
[oweals/busybox.git] / utility.c
index f3af01f44c375e5117f5b1322ba2ddb4ff291198..a313078cfd49c1cbdb22809060012d072291677e 100644 (file)
--- a/utility.c
+++ b/utility.c
 #include <dirent.h>
 #include <time.h>
 #include <utime.h>
-#include <sys/stat.h>
 #include <unistd.h>
 #include <ctype.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
 #include <sys/utsname.h>               /* for uname(2) */
 
 #if defined BB_FEATURE_MOUNT_LOOP
 #include <fcntl.h>
-#include <sys/ioctl.h>
 #include <linux/loop.h>
 #endif
 
@@ -80,7 +80,6 @@ const char mtab_file[] = "/dev/mtab";
 #  endif
 #endif
 
-
 extern void usage(const char *usage)
 {
        fprintf(stderr, "BusyBox v%s (%s) multi-call binary -- GPL2\n\n",
@@ -139,6 +138,22 @@ extern int get_kernel_revision(void)
 _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
+#endif
+
+/* Include our own version of <sys/mount.h>, since libc5 doesn't
+ * know about umount2 */
+extern _syscall1(int, umount, const char *, special_file);
+extern _syscall2(int, umount2, const char *, special_file, int, flags);
+extern _syscall5(int, mount, const char *, special_file, const char *, dir,
+               const char *, fstype, unsigned long int, rwflag, const void *, data);
+#endif
+
 
 
 #if defined (BB_CP_MV) || defined (BB_DU)
@@ -902,11 +917,12 @@ unsigned long my_getpwnamegid(char *name)
 #endif /* BB_CHMOD_CHOWN_CHGRP || BB_PS || BB_LS || BB_TAR || BB_ID */ 
 
 
-#if (defined BB_CHVT) || (defined BB_DEALLOCVT)
+#if (defined BB_CHVT) || (defined BB_DEALLOCVT) || (defined BB_SETKEYCODES)
 
-
-#include <linux/kd.h>
-#include <sys/ioctl.h>
+/* From <linux/kd.h> */ 
+#define KDGKBTYPE       0x4B33  /* get keyboard type */
+#define         KB_84           0x01
+#define         KB_101          0x02    /* this is what we always answer */
 
 int is_a_console(int fd)
 {
@@ -987,7 +1003,7 @@ int get_console_fd(char *tty_name)
 }
 
 
-#endif                                                 /* BB_CHVT || BB_DEALLOCVT */
+#endif                                                 /* BB_CHVT || BB_DEALLOCVT || BB_SETKEYCODES */
 
 
 #if !defined BB_REGEXP && (defined BB_GREP || defined BB_SED)
@@ -1199,9 +1215,6 @@ extern struct mntent *findMountPoint(const char *name, const char *table)
                return 0;
 
        while ((mountEntry = getmntent(mountTable)) != 0) {
-               if (strcmp(mountEntry->mnt_fsname, "none") == 0) {
-                       continue;
-               }
                if (strcmp(name, mountEntry->mnt_dir) == 0
                        || strcmp(name, mountEntry->mnt_fsname) == 0)   /* String match. */
                        break;
@@ -1331,7 +1344,7 @@ extern pid_t* findPidByName( char* pidName)
                fatalError( "\nDEVPS_GET_PID_LIST: %s\n", strerror (errno));
 
        /* Now search for a match */
-       for (i=1; i<pid_array[0] ; i++) {
+       for (i=1, j=0; i<pid_array[0] ; i++) {
                char* p;
                struct pid_info info;
 
@@ -1603,7 +1616,7 @@ extern char *get_line_from_file(FILE *file)
                if (ch == EOF)
                        break;
                /* grow the line buffer as necessary */
-               if (idx > linebufsz-1)
+               if (idx > linebufsz-2)
                        linebuf = realloc(linebuf, linebufsz += GROWBY);
                linebuf[idx++] = (char)ch;
                if ((char)ch == '\n')
@@ -1662,6 +1675,23 @@ 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
+
 /* END CODE */
 /*
 Local Variables: