From 76ea3a2c7fc1b6ff03d566af66c971dbf867be45 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Wed, 22 Jan 2003 19:55:59 -0500 Subject: fsck.c (parse_fstab_line, parse_escape): Add support for backslash escaping in /etc/fstab. (i.e., so that \040 will work.) --- misc/fsck.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'misc/fsck.c') 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 */ -- cgit v1.2.3