[Toybox] [PATCH 06/10] lib/getmountlist: setmntent(), getmntent_r() and stpcpy() are not defined in bionic.

Georgi Chorbadzhiyski gf at unixsol.org
Wed Mar 7 16:38:58 PST 2012


Use getmntent() and strcpy() to simulate stpcpy(). This whole
code looks buggy. For example getmntent_r() uses uninitialized
FILE * parameter and the whole stpcpy() business looks strange.
---
 lib/getmountlist.c |   31 ++++++++++++++++++-------------
 1 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/lib/getmountlist.c b/lib/getmountlist.c
index 1b23544..9a3a03d 100644
--- a/lib/getmountlist.c
+++ b/lib/getmountlist.c
@@ -18,26 +18,31 @@ struct mtab_list *getmountlist(int die)
 {
 	FILE *fp;
 	struct mtab_list *mtlist, *mt;
-	struct mntent me;
+//	struct mntent me;
+	struct mntent *me;
 	char evilbuf[2*PATH_MAX];
 
 	mtlist = 0;
-	if (!(fp = setmntent(path_mounts, "r"))) {
-		if (die) error_exit("cannot open %s", path_mounts);
-	} else {
-		while (getmntent_r(fp, &me, evilbuf, sizeof(evilbuf))) {
-			mt = xzalloc(sizeof(struct mtab_list) + strlen(me.mnt_fsname) +
-				strlen(me.mnt_dir) + strlen(me.mnt_type) + 3);
+//	if (!(fp = setmntent(path_mounts, "r"))) {
+//		if (die) error_exit("cannot open %s", path_mounts);
+//	} else {
+//		while (getmntent_r(fp, &me, evilbuf, sizeof(evilbuf))) {
+		fp = fopen(path_mounts, "r");
+		while ( (me = getmntent(fp)) ) {
+			mt = xzalloc(sizeof(struct mtab_list) + strlen(me->mnt_fsname) +
+				strlen(me->mnt_dir) + strlen(me->mnt_type) + 3);
 			mt->next = mtlist;
 			// Get information about this filesystem.  Yes, we need both.
-			stat(me.mnt_dir, &(mt->stat));
-			statvfs(me.mnt_dir, &(mt->statvfs));
+			stat(me->mnt_dir, &(mt->stat));
+			statvfs(me->mnt_dir, &(mt->statvfs));
 			// Remember information from /proc/mounts
-			mt->dir = stpcpy(mt->type, me.mnt_type) + 1;
-			mt->device = stpcpy(mt->dir, me.mnt_dir) + 1;
-			strcpy(mt->device, me.mnt_fsname);
+			strcpy(mt->type, me->mnt_type);
+			strcpy(mt->dir, me->mnt_dir);
+			mt->dir = mt->type + strlen(mt->type) + 1;
+			mt->device = mt->dir + strlen(mt->dir) + 1;
+			strcpy(mt->device, me->mnt_fsname);
 			mtlist = mt;
 		}
-	}
+//	}
 	return mtlist;
 }
-- 
1.7.5.1




More information about the Toybox mailing list