svn commit: trunk/busybox: include libbb util-linux

vda at busybox.net vda at busybox.net
Fri Aug 3 14:16:25 UTC 2007


Author: vda
Date: 2007-08-03 07:16:24 -0700 (Fri, 03 Aug 2007)
New Revision: 19402

Log:
mount: print errno on NFS error (again)



Modified:
   trunk/busybox/include/libbb.h
   trunk/busybox/libbb/loop.c
   trunk/busybox/libbb/perror_msg.c
   trunk/busybox/libbb/perror_msg_and_die.c
   trunk/busybox/util-linux/mount.c


Changeset:
Modified: trunk/busybox/include/libbb.h
===================================================================
--- trunk/busybox/include/libbb.h	2007-08-03 10:58:12 UTC (rev 19401)
+++ trunk/busybox/include/libbb.h	2007-08-03 14:16:24 UTC (rev 19402)
@@ -733,7 +733,10 @@
 
 extern char *query_loop(const char *device);
 extern int del_loop(const char *device);
-extern int set_loop(char **device, const char *file, unsigned long long offset);
+/* If *devname is not NULL, use that name, otherwise try to find free one,
+ * malloc and return it in *devname.
+ * return value: 1: read-only loopdev was setup, 0: rw, < 0: error */
+extern int set_loop(char **devname, const char *file, unsigned long long offset);
 
 
 //TODO: pass buf pointer or return allocated buf (avoid statics)?
@@ -1061,6 +1064,7 @@
 #endif
 # define VC_FORMAT "/dev/vc/%d"
 # define LOOP_FORMAT "/dev/loop/%d"
+# define LOOP_NAMESIZE (sizeof("/dev/loop/") + sizeof(int)*3 + 1)
 # define LOOP_NAME "/dev/loop/"
 # define FB_0 "/dev/fb/0"
 #else
@@ -1081,6 +1085,7 @@
 #endif
 # define VC_FORMAT "/dev/tty%d"
 # define LOOP_FORMAT "/dev/loop%d"
+# define LOOP_NAMESIZE (sizeof("/dev/loop") + sizeof(int)*3 + 1)
 # define LOOP_NAME "/dev/loop"
 # define FB_0 "/dev/fb0"
 #endif

Modified: trunk/busybox/libbb/loop.c
===================================================================
--- trunk/busybox/libbb/loop.c	2007-08-03 10:58:12 UTC (rev 19401)
+++ trunk/busybox/libbb/loop.c	2007-08-03 14:16:24 UTC (rev 19402)
@@ -81,7 +81,8 @@
  */
 int set_loop(char **device, const char *file, unsigned long long offset)
 {
-	char dev[20], *try;
+	char dev[LOOP_NAMESIZE];
+	char *try;
 	bb_loop_info loopinfo;
 	struct stat statbuf;
 	int i, dfd, ffd, mode, rc = -1;
@@ -140,14 +141,14 @@
 			rc = -1;
 		}
 		close(dfd);
-try_again:
+ try_again:
 		if (*device) break;
 	}
 	close(ffd);
 	if (!rc) {
 		if (!*device)
 			*device = xstrdup(dev);
-		return (mode == O_RDONLY) ? 1 : 0;
+		return (mode == O_RDONLY); /* 1:ro, 0:rw */
 	}
 	return rc;
 }

Modified: trunk/busybox/libbb/perror_msg.c
===================================================================
--- trunk/busybox/libbb/perror_msg.c	2007-08-03 10:58:12 UTC (rev 19401)
+++ trunk/busybox/libbb/perror_msg.c	2007-08-03 14:16:24 UTC (rev 19402)
@@ -14,6 +14,10 @@
 	va_list p;
 
 	va_start(p, s);
-	bb_vperror_msg(s, p);
+	/* Guard against "<error message>: Success" */
+	if (!errno)
+		bb_verror_msg(s, p, NULL);
+	else
+		bb_vperror_msg(s, p);
 	va_end(p);
 }

Modified: trunk/busybox/libbb/perror_msg_and_die.c
===================================================================
--- trunk/busybox/libbb/perror_msg_and_die.c	2007-08-03 10:58:12 UTC (rev 19401)
+++ trunk/busybox/libbb/perror_msg_and_die.c	2007-08-03 14:16:24 UTC (rev 19402)
@@ -14,7 +14,11 @@
 	va_list p;
 
 	va_start(p, s);
-	bb_vperror_msg(s, p);
+	/* Guard against "<error message>: Success" */
+	if (!errno)
+		bb_verror_msg(s, p, NULL);
+	else
+		bb_vperror_msg(s, p);
 	va_end(p);
 	xfunc_die();
 }

Modified: trunk/busybox/util-linux/mount.c
===================================================================
--- trunk/busybox/util-linux/mount.c	2007-08-03 10:58:12 UTC (rev 19401)
+++ trunk/busybox/util-linux/mount.c	2007-08-03 14:16:24 UTC (rev 19402)
@@ -1439,7 +1439,7 @@
 	// Might this be an NFS filesystem?
 
 	if (ENABLE_FEATURE_MOUNT_NFS
-	 && (!mp->mnt_type || !strcmp(mp->mnt_type,"nfs"))
+	 && (!mp->mnt_type || !strcmp(mp->mnt_type, "nfs"))
 	 && strchr(mp->mnt_fsname, ':') != NULL
 	) {
 		rc = nfsmount(mp, vfsflags, filteropts);
@@ -1458,15 +1458,12 @@
 
 		if (ENABLE_FEATURE_MOUNT_LOOP && S_ISREG(st.st_mode)) {
 			loopFile = bb_simplify_path(mp->mnt_fsname);
-			mp->mnt_fsname = 0;
-			switch (set_loop(&(mp->mnt_fsname), loopFile, 0)) {
-			case 0:
-			case 1:
-				break;
-			default:
-				bb_error_msg( errno == EPERM || errno == EACCES
-					? bb_msg_perm_denied_are_you_root
-					: "cannot setup loop device");
+			mp->mnt_fsname = NULL; /* will receive malloced loop dev name */
+			if (set_loop(&(mp->mnt_fsname), loopFile, 0) < 0) {
+				if (errno == EPERM || errno == EACCES)
+					bb_error_msg(bb_msg_perm_denied_are_you_root);
+				else
+					bb_perror_msg("cannot setup loop device");
 				return errno;
 			}
 
@@ -1516,10 +1513,10 @@
 	if (ENABLE_FEATURE_CLEAN_UP)
 		free(filteropts);
 
-	if (rc && errno == EBUSY && ignore_busy) rc = 0;
+	if (rc && errno == EBUSY && ignore_busy)
+		rc = 0;
 	if (rc < 0)
-		/* perror here sometimes says "mounting ... on ... failed: Success" */
-		bb_error_msg("mounting %s on %s failed", mp->mnt_fsname, mp->mnt_dir);
+		bb_perror_msg("mounting %s on %s failed", mp->mnt_fsname, mp->mnt_dir);
 
 	return rc;
 }
@@ -1527,7 +1524,7 @@
 // Parse options, if necessary parse fstab/mtab, and call singlemount for
 // each directory to be mounted.
 
-const char must_be_root[] = "you must be root";
+static const char must_be_root[] = "you must be root";
 
 int mount_main(int argc, char **argv);
 int mount_main(int argc, char **argv)




More information about the busybox-cvs mailing list