[Crash-utility] [patch 1/1] patch to handle path name properly in "mount" command

Lin Feng Shen shenlinf at cn.ibm.com
Thu Jul 6 17:20:23 UTC 2006


From: Lin Feng Shen <shenlinf at cn.ibm.com>

"mount [devname | dirname]" showes mount points according to the device
name or directory name. Generally speaking, two path names shouldn't be
different due to additional "/", e.g. /distros and /distros/, but it 
seems that mount command doesn't handle it properly, e.g.
----------
crash> mount
    VFSMOUNT         SUPERBLK     TYPE   DEVNAME       DIRNAME
...
c00000000224eb80 c000000002589800 ext3   /dev/sda2     /boot
...
crash> mount /boot
    VFSMOUNT         SUPERBLK     TYPE   DEVNAME       DIRNAME
c00000000224eb80 c000000002589800 ext3   /dev/sda2     /boot
crash> mount /boot/
crash>
----------

The patch provides pathcmp() replacing STREQ to compare two path names.
It's created against crash-4.0-25.4 in SLES10_RC3.

Signed-off-by: Lin Feng Shen <shenlinf at cn.ibm.com>
---

diff -upNr crash-4.0-2.18.orig/defs.h crash-4.0-2.18/defs.h
--- crash-4.0-2.18.orig/defs.h  2006-07-05 23:46:10.000000000 -0400
+++ crash-4.0-2.18/defs.h       2006-07-06 06:30:12.000000000 -0400
@@ -91,6 +91,7 @@
 #define STREQ(A, B)      (A && B && (strcmp((char *)(A), (char *)(B)) == 
0))
 #define STRNEQ(A, B)     (A && B && \
         (strncmp((char *)(A), (char *)(B), strlen((char *)(B))) == 0))
+#define PATHEQ(A, B)     (A && B && (pathcmp((char *)(A), (char *)(B)) == 
0))
 #define BZERO(S, N)      (memset(S, NULLCHAR, N))
 #define BCOPY(S, D, C)   (memcpy(D, S, C))
 #define BNEG(S, N)       (memset(S, 0xff, N))
@@ -2876,6 +2877,7 @@ int empty_list(ulong);
 int machine_type(char *);
 void command_not_supported(void);
 void option_not_supported(int);
+int pathcmp(char* p1, char* p2);
 
 
 /* 
diff -upNr crash-4.0-2.18.orig/filesys.c crash-4.0-2.18/filesys.c
--- crash-4.0-2.18.orig/filesys.c       2006-07-05 23:46:09.000000000 
-0400
+++ crash-4.0-2.18/filesys.c    2006-07-06 06:30:22.000000000 -0400
@@ -1193,7 +1193,7 @@ cmd_mount(void)
                                        continue;
 
                                for (i = 0; i < c; i++) {
-                                       if (STREQ(arglist[i], 
spec_string)) 
+                                       if (PATHEQ(arglist[i], 
spec_string)) 
                                                found = TRUE;
                                }
                                if (found) {
diff -upNr crash-4.0-2.18.orig/tools.c crash-4.0-2.18/tools.c
--- crash-4.0-2.18.orig/tools.c 2006-07-05 23:46:10.000000000 -0400
+++ crash-4.0-2.18/tools.c      2006-07-06 06:28:01.000000000 -0400
@@ -4328,3 +4328,23 @@ option_not_supported(int c)
        error(FATAL, "-%c option not supported on this architecture or 
kernel\n", 
                (char)c);
 }
+
+/*
+ * The function to compare two device paths
+ */
+int
+pathcmp(char* p1, char* p2)
+{
+        char c1, c2;
+
+        do {
+                if ((c1 = *p1++) == '/')
+                        while(*p1 == '/'){ p1++; }
+                if ((c2 = *p2++) == '/')
+                        while(*p2 == '/'){ p2++; }
+                if (c1 == '\0')
+                        return ((c2 == '/') && (*p2 == '\0')) ? 0 : c1 - 
c2;
+        } while (c1 == c2);
+
+        return ( (c2 == '\0') && (c1 == '/') && (*p1 == '\0')) ? 0 : c1 - 
c2;
+}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20060707/3169a173/attachment.htm>


More information about the Crash-utility mailing list