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

Dave Anderson anderson at redhat.com
Thu Jul 6 20:34:11 UTC 2006


Lin Feng Shen wrote:

>
> 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>
> ----------
>

Tests OK -- queued for next release...

Thanks again,
   Dave


>
> 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;
> +}
>
>       -----------------------------------------------------------------------------------------------------------
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20060706/da5544bd/attachment.htm>


More information about the Crash-utility mailing list