SVN: rc-scripts/trunk/src/fstab-decode.c

glen glen at pld-linux.org
Thu Nov 1 14:23:18 CET 2007


Author: glen
Date: Thu Nov  1 14:23:18 2007
New Revision: 8947

Added:
   rc-scripts/trunk/src/fstab-decode.c
Log:
- add from fc


Added: rc-scripts/trunk/src/fstab-decode.c
==============================================================================
--- (empty file)
+++ rc-scripts/trunk/src/fstab-decode.c	Thu Nov  1 14:23:18 2007
@@ -0,0 +1,86 @@
+/* fstab-decode(8).
+
+Copyright (c) 2006 Red Hat, Inc. All rights reserved.
+
+This copyrighted material is made available to anyone wishing to use, modify,
+copy, or redistribute it subject to the terms and conditions of the GNU General
+Public License v.2.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
+Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+Author: Miloslav Trmac <mitr at redhat.com> */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/* Decode the fstab-encoded string in place. */
+static void
+decode(char *s)
+{
+	const char *src;
+	char *dest;
+
+	src = s;
+	dest = s;
+	while (*src != '\0') {
+		if (*src != '\\')
+			*dest = *src++;
+		else {
+			static const struct repl {
+				char orig[4];
+				size_t len;
+				char new;
+			} repls[] = {
+#define R(X, Y) { X, sizeof(X) - 1, Y }
+				R("\\", '\\'),
+				R("011", '\t'),
+				R("012", '\n'),
+				R("040", ' '),
+				R("134", '\\')
+#undef R
+			};
+
+			size_t i;
+
+			for (i = 0; i < sizeof (repls) / sizeof (repls[0]);
+			     i++) {
+				if (memcmp(src + 1, repls[i].orig,
+					   repls[i].len) == 0) {
+					*dest = repls[i].new;
+					src += 1 + repls[i].len;
+					goto found;
+				}
+			}
+			*dest = *src++;
+		found:
+			;
+		}
+		dest++;
+	}
+	*dest = '\0';
+}
+
+int
+main (int argc, char *argv[])
+{
+	size_t i;
+
+	if (argc < 2) {
+		fprintf(stderr, "Usage: fstab-decode command [arguments]\n");
+		return EXIT_FAILURE;
+	}
+	for (i = 2; i < (size_t)argc; i++)
+		decode(argv[i]);
+	execvp(argv[1], argv + 1);
+	fprintf(stderr, "fstab-decode: %s: %s\n", argv[1], strerror(errno));
+	return 127;
+}


More information about the pld-cvs-commit mailing list