1 /* (C) 1998 Red Hat Software, Inc. -- Licensing details are in the COPYING
2 file accompanying popt source distributions, available from
3 ftp://ftp.redhat.com/pub/code/popt */
10 static void configLine(poptContext con, char * line) {
11 int nameLength = strlen(con->appName);
13 struct poptAlias alias;
15 char * longName = NULL;
16 char shortName = '\0';
18 if (strncmp(line, con->appName, nameLength)) return;
20 if (!*line || !i_isspace(*line)) return;
21 while (*line && i_isspace(*line)) line++;
24 while (!*line || !i_isspace(*line)) line++;
26 while (*line && i_isspace(*line)) line++;
30 while (!*line || !i_isspace(*line)) line++;
32 while (*line && i_isspace(*line)) line++;
35 if (opt[0] == '-' && opt[1] == '-')
37 else if (opt[0] == '-' && !opt[2])
40 if (!strcmp(entryType, "alias")) {
41 if (poptParseArgvString(line, &alias.argc, &alias.argv)) return;
42 alias.longName = longName, alias.shortName = shortName;
43 poptAddAlias(con, alias, 0);
44 } else if (!strcmp(entryType, "exec")) {
45 con->execs = realloc(con->execs,
46 sizeof(*con->execs) * (con->numExecs + 1));
48 con->execs[con->numExecs].longName = g_strdup(longName);
50 con->execs[con->numExecs].longName = NULL;
52 con->execs[con->numExecs].shortName = shortName;
53 con->execs[con->numExecs].script = g_strdup(line);
59 int poptReadConfigFile(poptContext con, char * fn) {
60 char * file, * chptr, * end;
65 fd = open(fn, O_RDONLY);
70 return POPT_ERROR_ERRNO;
73 fileLength = lseek(fd, 0, SEEK_END);
76 file = malloc(fileLength + 1);
77 if (read(fd, file, fileLength) != fileLength) {
82 return POPT_ERROR_ERRNO;
86 dst = buf = malloc(fileLength + 1);
89 end = (file + fileLength);
95 while (*dst && i_isspace(*dst)) dst++;
96 if (*dst && *dst != '#') {
106 /* \ at the end of a line does not insert a \n */
121 int poptReadDefaultConfig(poptContext con, int useEnv) {
125 if (!con->appName) return 0;
127 rc = poptReadConfigFile(con, "/etc/popt");
130 if (getuid() != geteuid()) return 0;
133 if ((home = getenv("HOME"))) {
134 fn = malloc(strlen(home) + 20);
136 strcat(fn, "/.popt");
137 rc = poptReadConfigFile(con, fn);