Kept to help with spaces in the mount path

Upstream-Status: Backport

Linux mangles spaces in mount points by changing them to an octal string
of '\040'.  So lets scan the mount point and fix it up by replacing all
occurrences off '\0##' with the ASCII value of 0##.  Requires a writable
string as input as we mangle in place.  Some of this was taken from the
util-linux package.

Signed-off-by: Morgan Little <morgan.little@windriver.com>
--- eject/eject.c.ori   2007-06-24 00:08:44 -0700
+++ eject/eject.c       2007-06-24 00:12:44 -0700
@@ -370,6 +370,30 @@
 
 
 /*
+ * Linux mangles spaces in mount points by changing them to an octal string
+ * of '\040'.  So lets scan the mount point and fix it up by replacing all
+ * occurrences off '\0##' with the ASCII value of 0##.  Requires a writable
+ * string as input as we mangle in place.  Some of this was taken from the
+ * util-linux package.
+ */
+#define octalify(a) ((a) & 7)
+#define tooctal(s) (64*octalify(s[1]) + 8*octalify(s[2]) + octalify(s[3]))
+#define isoctal(a) (((a) & ~7) == '0')
+static char *DeMangleMount(char *s)
+{
+	char *tmp = s;
+	while ((tmp = strchr(tmp, '\\')) != NULL) {
+		if (isoctal(tmp[1]) && isoctal(tmp[2]) && isoctal(tmp[3])) {
+			tmp[0] = tooctal(tmp);
+			memmove(tmp+1, tmp+4, strlen(tmp)-3);
+		}
+		++tmp;
+	}
+	return s;
+}
+
+
+/*
  * Given name, such as foo, see if any of the following exist:
  *
  * foo (if foo starts with '.' or '/')
@@ -884,8 +908,8 @@
 			if (((strcmp(s1, name) == 0) || (strcmp(s2, name) == 0)) ||
 				((maj != -1) && (maj == mtabmaj) && (min == mtabmin))) {
 				FCLOSE(fp);
-				*deviceName = strdup(s1);
-				*mountName = strdup(s2);
+				*deviceName = DeMangleMount(strdup(s1));
+				*mountName = DeMangleMount(strdup(s2));
 				return 1;
 			}
 		}
@@ -928,8 +952,8 @@
 		rc = sscanf(line, "%1023s %1023s", s1, s2);
 		if (rc >= 2 && s1[0] != '#' && strcmp(s2, name) == 0) {
 			FCLOSE(fp);
-			*deviceName = strdup(s1);
-			*mountName = strdup(s2);
+			*deviceName = DeMangleMount(strdup(s1));
+			*mountName = DeMangleMount(strdup(s2));
 			return 1;
 		}
 	}
