summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--misc/ChangeLog6
-rw-r--r--misc/fsck.c42
2 files changed, 48 insertions, 0 deletions
diff --git a/misc/ChangeLog b/misc/ChangeLog
index e5e4fc12..c5273d4c 100644
--- a/misc/ChangeLog
+++ b/misc/ChangeLog
@@ -1,3 +1,9 @@
+2003-01-22 Theodore Ts'o <tytso@mit.edu>
+
+ * fsck.c (parse_fstab_line, parse_escape): Add support for
+ backslash escaping in /etc/fstab. (i.e., so that \040
+ will work.)
+
2002-11-12 Theodore Ts'o <tytso@mit.edu>
* mke2fs.c (PRS): Don't enable the dir_index feature by default;
diff --git a/misc/fsck.c b/misc/fsck.c
index ac54d2e4..c6df8451 100644
--- a/misc/fsck.c
+++ b/misc/fsck.c
@@ -153,6 +153,41 @@ static char *parse_word(char **buf)
return word;
}
+static void parse_escape(char *word)
+{
+ char *p, *q;
+ int ac, i;
+
+ for (p = word, q = word; *p; p++, q++) {
+ *q = *p;
+ if (*p != '\\')
+ continue;
+ if (*++p == 0)
+ break;
+ if (*p == 't') {
+ *q = '\t';
+ continue;
+ }
+ if (*p == 'n') {
+ *q = '\n';
+ continue;
+ }
+ if (!isdigit(*p)) {
+ *q = *p;
+ continue;
+ }
+ ac = 0;
+ for (i = 0; i < 3; i++, p++) {
+ if (!isdigit(*p))
+ break;
+ ac = (ac * 8) + (*p - '0');
+ }
+ *q = ac;
+ p--;
+ }
+ *q = 0;
+}
+
static void free_instance(struct fsck_instance *i)
{
if (i->prog)
@@ -183,6 +218,13 @@ static int parse_fstab_line(char *line, struct fs_info **ret_fs)
freq = parse_word(&cp);
passno = parse_word(&cp);
+ parse_escape(device);
+ parse_escape(mntpnt);
+ parse_escape(type);
+ parse_escape(opts);
+ parse_escape(freq);
+ parse_escape(passno);
+
if (!device)
return 0; /* Allow blank lines */