SOURCES: setup-update-fstab.c (NEW) - c is better than lua

sparky sparky at pld-linux.org
Sat Sep 17 14:50:00 CEST 2005


Author: sparky                       Date: Sat Sep 17 12:50:00 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- c is better than lua

---- Files affected:
SOURCES:
   setup-update-fstab.c (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/setup-update-fstab.c
diff -u /dev/null SOURCES/setup-update-fstab.c:1.1
--- /dev/null	Sat Sep 17 14:50:00 2005
+++ SOURCES/setup-update-fstab.c	Sat Sep 17 14:49:54 2005
@@ -0,0 +1,85 @@
+/*
+ * $Id$
+ * adds devmode and devgid to usbfs in fstab
+ *
+ */
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <signal.h>
+
+void eputs(const char *msg)
+{
+	write(2, msg, strlen(msg));
+}
+
+int main()
+{
+	char *name = "/etc/fstab";
+	char *backup_name = "/etc/fstab.bak";
+	char *add = ",devmode=0664,devgid=78";
+	
+	char *old;
+	int i, fd;
+	int old_sz;
+	struct stat st;
+
+	eputs("Updating /etc/fstab...");
+	fd = open(name, O_RDONLY);
+	if (fd < 0) {
+		eputs("\nError: can't open file\n");
+		return 1;
+	}
+	fstat(fd, &st);
+	old = (char *) malloc(st.st_size);
+	read(fd, old, st.st_size);
+	close(fd);
+	old_sz = st.st_size;
+	
+	fd = open(backup_name, O_WRONLY|O_CREAT|O_TRUNC, 0600);
+	if (fd < 0) {
+		eputs("\nError: can't make backup\n");
+		return 2;
+	}
+	write(fd, old, old_sz);
+	close(fd);
+	
+	// find usbfs
+	for (i = 0; i < old_sz; i++) {
+		if ( old[i] == 'u' && old[i+1] == 's' && old[i+2] == 'b'
+				&& old[i+3] == 'f' && old[i+4] == 's')
+			break;
+	}
+	// find defau(lts)
+	for (;i < old_sz; i++) {
+		if ( old[i] == 'd' && old[i+1] == 'e' && old[i+2] == 'f' && old[i+3] == 'a' && old[i+4] == 'u' )
+			break;
+	}
+	// find first space
+	for (;i < old_sz; i++) {
+		if ( old[i] == ' ' || old[i] == '\t' )
+			break;
+	}
+	if ( i >= old_sz ) {
+		eputs("\nError: can't find correct usbfs entry\n");
+		return 3;
+	}
+	
+	fd = open(name, O_WRONLY|O_CREAT|O_TRUNC);
+	if (fd < 0) {
+		eputs("\nError: can't open file for writing\n");
+		return 4;
+	}
+	write(fd, old, i);
+	write(fd, add, strlen(add));
+	write(fd, old + i, old_sz - i);
+	close(fd);
+	eputs("OK\n");
+	
+	return 0;
+}
+
================================================================



More information about the pld-cvs-commit mailing list