Date: Tue, 5 Mar 1996 21:32:41 -0800 (PST) From: asami@cs.berkeley.edu (Satoshi Asami) To: CVS-committers@freefall.freebsd.org, cvs-all@freefall.freebsd.org, cvs-sbin@freefall.freebsd.org Subject: Re: cvs commit: src/sbin/mount mount.c Message-ID: <199603060532.VAA13683@silvia.HIP.Berkeley.EDU> In-Reply-To: <199603060411.UAA13389@silvia.HIP.Berkeley.EDU> (asami@cs.berkeley.edu)
next in thread | previous in thread | raw e-mail | index | archive | help
* But anyway, people don't try this at home...the patch is totally
* bogus, sizeof(array of "char *"s) will not return the total number of
* characters used by the strings. ;)
*
* I'll send out another one after dinner....
Ok, this one should be ok. I also converted a "do-while" to a "for",
I don't know why it had to be three lines instead of one....
===
Index: mount.c
===================================================================
RCS file: /usr/cvs/src/sbin/mount/mount.c,v
retrieving revision 1.9
diff -c -r1.9 mount.c
*** mount.c 1996/03/03 08:44:22 1.9
--- mount.c 1996/03/06 05:29:50
***************
*** 327,339 ****
exit(mount_ufs(argc, (char * const *) argv));
/* Go find an executable. */
! edir = edirs;
! do {
(void)snprintf(execname,
sizeof(execname), "%s/mount_%s", *edir, vfstype);
execv(execname, (char * const *)argv);
! warn("exec %s for %s", execname, name);
! } while (*++edir != NULL);
exit(1);
/* NOTREACHED */
default: /* Parent. */
--- 327,354 ----
exit(mount_ufs(argc, (char * const *) argv));
/* Go find an executable. */
! for (edir = edirs; *edir; edir++) {
(void)snprintf(execname,
sizeof(execname), "%s/mount_%s", *edir, vfstype);
execv(execname, (char * const *)argv);
! }
! if (errno == ENOENT) {
! int len = 0;
! char *tmp;
! for (edir = edirs; *edir; edir++)
! len += strlen(*edir) + 2; /* ", " */
! if ((tmp = malloc(len)) == NULL) {
! warn(NULL);
! exit(1);
! }
! tmp[0] = '\0';
! for (edir = edirs; *edir; edir++) {
! strcat(tmp, *edir);
! if (edir[1] != NULL)
! strcat(tmp, ", ");
! }
! warn("exec mount_%s not found in %s", vfstype, tmp);
! }
exit(1);
/* NOTREACHED */
default: /* Parent. */
===
I know it's more complicated than necessary (I can probably get away
with "char tmp[100]" or some such), but I don't want it to break when
someone decides to add 30 directories to the list.... :)
Satoshi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199603060532.VAA13683>
