]> git.pld-linux.org Git - projects/setup.git/blame - update-fstab.c
- ChangeLog update by changelog.sh
[projects/setup.git] / update-fstab.c
CommitLineData
a904c8c2 1/*
2 * $Id$
3 * adds devmode and devgid to usbfs in fstab
4 *
5 */
6#include <sys/types.h>
7#include <sys/mman.h>
8#include <sys/stat.h>
9#include <unistd.h>
10#include <fcntl.h>
11#include <stdlib.h>
12#include <string.h>
13#include <signal.h>
14
15void eputs(const char *msg)
16{
17 write(2, msg, strlen(msg));
18}
19
20int main()
21{
22 char *name = "/etc/fstab";
23 char *backup_name = "/etc/fstab.bak";
b12a35e1 24 char *add = ",devgid=78,devmode=0664";
a904c8c2 25
26 char *old;
27 int i, fd;
28 int old_sz;
29 struct stat st;
30
31 eputs("Updating /etc/fstab...");
32 fd = open(name, O_RDONLY);
33 if (fd < 0) {
34 eputs("\nError: can't open file\n");
35 return 1;
36 }
37 fstat(fd, &st);
38 old = (char *) malloc(st.st_size);
abae7e08
ER
39 if (old == NULL) {
40 eputs("\nError: malloc failure\n");
41 return 1;
42 }
a904c8c2 43 read(fd, old, st.st_size);
44 close(fd);
45 old_sz = st.st_size;
46
47 fd = open(backup_name, O_WRONLY|O_CREAT|O_TRUNC, 0600);
48 if (fd < 0) {
49 eputs("\nError: can't make backup\n");
50 return 2;
51 }
52 write(fd, old, old_sz);
53 close(fd);
54
55 // find usbfs
56 for (i = 0; i < old_sz; i++) {
57 if ( old[i] == 'u' && old[i+1] == 's' && old[i+2] == 'b'
58 && old[i+3] == 'f' && old[i+4] == 's')
59 break;
60 }
61 // find defau(lts)
62 for (;i < old_sz; i++) {
63 if ( old[i] == 'd' && old[i+1] == 'e' && old[i+2] == 'f' && old[i+3] == 'a' && old[i+4] == 'u' )
64 break;
65 }
66 // find first space
67 for (;i < old_sz; i++) {
68 if ( old[i] == ' ' || old[i] == '\t' )
69 break;
70 }
71 if ( i >= old_sz ) {
72 eputs("\nError: can't find correct usbfs entry\n");
314a24f0 73 return 0;
a904c8c2 74 }
75
76 fd = open(name, O_WRONLY|O_CREAT|O_TRUNC);
77 if (fd < 0) {
78 eputs("\nError: can't open file for writing\n");
79 return 4;
80 }
81 write(fd, old, i);
82 write(fd, add, strlen(add));
83 write(fd, old + i, old_sz - i);
84 close(fd);
85 eputs("OK\n");
86
87 return 0;
88}
89
This page took 0.095866 seconds and 4 git commands to generate.