Skip to contentSkip to conversation

xfs_quota: support relative path as `path' arguments

RFC PATCH In review Satoru Takeuchi 2 participants 3 messages Nov 27, 2012

lore
Share & tools
lore
#0 lore raw

RFC PATCH 1/1 xfs_quota: support relative path as `path' arguments

From: Satoru Takeuchi <[email protected]>

Current xfs_quota only accepts absolute path as its `path' arguments. This patch adds the support of relative path for user's convenience.

---
 libxcmd/paths.c |   42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)
libxcmd/paths.c +29 -13
index 2a92299..bd84cde 100644
@@ -27,6 +27,7 @@
 #include <xfs/path.h>
 #include <xfs/input.h>
 #include <xfs/project.h>
+#include <limits.h>
 
 extern char *progname;
 
@@ -273,6 +274,7 @@ fs_table_initialise_mounts(
 	FILE		*mtp;
 	char		*fslog, *fsrt;
 	int		error, found;
+	char		*rpath = NULL;
 
 	error = found = 0;
 	fslog = fsrt = NULL;
@@ -286,26 +288,32 @@ fs_table_initialise_mounts(
 	if ((mtp = setmntent(mtab_file, "r")) == NULL)
 		return ENOENT;
 
+	if (path)
+		if ((rpath = realpath(path, NULL)) == NULL)
+			return ENOENT;
+
 	while ((mnt = getmntent(mtp)) != NULL) {
 		if (strcmp(mnt->mnt_type, "xfs") != 0)
 			continue;
-		if (path &&
-		    ((strcmp(path, mnt->mnt_dir) != 0) &&
-		     (strcmp(path, mnt->mnt_fsname) != 0)))
+		if (rpath &&
+		    ((strcmp(rpath, mnt->mnt_dir) != 0) &&
+		     (strcmp(rpath, mnt->mnt_fsname) != 0)))
 			continue;
 		if (fs_extract_mount_options(mnt, &fslog, &fsrt))
 			continue;
 		(void) fs_table_insert(mnt->mnt_dir, 0, FS_MOUNT_POINT,
 					mnt->mnt_fsname, fslog, fsrt);
-		if (path) {
+		if (rpath) {
 			found = 1;
 			break;
 		}
 	}
 	endmntent(mtp);
-	if (path && !found)
-		error = ENXIO;
-
+	if (rpath) {
+		free(rpath);
+		if (!found)
+			error = ENXIO;
+	}
 	return error;
 }
 
@@ -318,6 +326,7 @@ fs_table_initialise_mounts(
 {
 	struct statfs	*stats;
 	int		i, count, error, found;
+	char		*rpath = NULL;
 
 	error = found = 0;
 	if ((count = getmntinfo(&stats, 0)) < 0) {
@@ -326,24 +335,31 @@ fs_table_initialise_mounts(
 		return 0;
 	}
 
+	if (path)
+		if ((rpath = realpath(path, NULL)) == NULL)
+			return ENOENT;
+
 	for (i = 0; i < count; i++) {
 		if (strcmp(stats[i].f_fstypename, "xfs") != 0)
 			continue;
-		if (path &&
-		    ((strcmp(path, stats[i].f_mntonname) != 0) &&
-		     (strcmp(path, stats[i].f_mntfromname) != 0)))
+		if (rpath &&
+		    ((strcmp(rpath, stats[i].f_mntonname) != 0) &&
+		     (strcmp(rpath, stats[i].f_mntfromname) != 0)))
 			continue;
 		/* TODO: external log and realtime device? */
 		(void) fs_table_insert(stats[i].f_mntonname, 0,
 					FS_MOUNT_POINT, stats[i].f_mntfromname,
 					NULL, NULL);
-		if (path) {
+		if (rpath) {
 			found = 1;
 			break;
 		}
 	}
-	if (path && !found)
-		error = ENXIO;
+	if (rpath) {
+		free(rpath);
+		if (!found)
+			error = ENXIO;
+	}
 
 	return error;
 }
Signature · 6 lines
1.7.10.2

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Reviewed-by Tested-by on v1 1/1
#1 lore raw
Quoted 7 lines · Satoru Takeuchi

From: Satoru Takeuchi <[email protected]>

Current xfs_quota only accepts absolute path as its `path' arguments. This patch adds the support of relative path for user's convenience.

Using realpath() to handle the path being passed by user, not only makes able the usage of relative paths, but also fixes the problem in having a "/" at the end of the path. For those who abuses of TABs, this is very annoying.

Looks good,

Quoted 19 lines
---
 libxcmd/paths.c |   42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)
libxcmd/paths.c +1 -0
index 2a92299..bd84cde 100644
@@ -27,6 +27,7 @@
 #include <xfs/path.h>
 #include <xfs/input.h>
 #include <xfs/project.h>
+#include <limits.h>
 
 extern char *progname;
 

xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

Signature · 6 lines
Carlos

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
#2 lore raw

Hi Carlos,

Quoted 7 lines · Carlos Maiolino
Quoted 5 lines · Satoru Takeuchi

From: Satoru Takeuchi <[email protected]>

Current xfs_quota only accepts absolute path as its `path' arguments. This patch adds the support of relative path for user's convenience.

Quoted 6 lines
Quoted 2 lines

Using realpath() to handle the path being passed by user, not only makes able the usage of relative paths, but also fixes the problem in having a "/" at the end of the path. For those who abuses of TABs, this is very annoying.

Ah, I also tend to fix the trailing "/" at the end of the path as you said. But I forgot to mentioned about it by the patch description :-)

Thanks,
Satoru

Quoted 20 lines

Looks good,

Quoted 14 lines
---
 libxcmd/paths.c |   42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)
libxcmd/paths.c +1 -0
index 2a92299..bd84cde 100644
@@ -27,6 +27,7 @@
 #include <xfs/path.h>
 #include <xfs/input.h>
 #include <xfs/project.h>
+#include <limits.h>
 
Quoted 6 lines
Quoted 5 lines
libxcmd/paths.c +0 -0
 extern char *progname;
 

xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs