diff options
-rw-r--r-- | misc/ChangeLog | 6 | ||||
-rw-r--r-- | misc/fsck.c | 42 |
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 */ |