From 76ea3a2c7fc1b6ff03d566af66c971dbf867be45 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Wed, 22 Jan 2003 19:55:59 -0500 Subject: [PATCH] fsck.c (parse_fstab_line, parse_escape): Add support for backslash escaping in /etc/fstab. (i.e., so that \040 will work.) --- misc/ChangeLog | 6 ++++++ misc/fsck.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/misc/ChangeLog b/misc/ChangeLog index e5e4fc1..c5273d4 100644 --- a/misc/ChangeLog +++ b/misc/ChangeLog @@ -1,3 +1,9 @@ +2003-01-22 Theodore Ts'o + + * 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 * mke2fs.c (PRS): Don't enable the dir_index feature by default; diff --git a/misc/fsck.c b/misc/fsck.c index ac54d2e..c6df845 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 */ -- 1.8.3.1