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);