annotate mcabber/src/parsecfg.c @ 297:9bdfef4f4735

Add comment for the cfg_file() function
author Mikael Berthe <mikael@lilotux.net>
date Sat, 09 Jul 2005 23:20:36 +0100
parents f5dd437c057b
children 12f919be3da5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
1 #include <stdio.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
2 #include <stdlib.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
3 #include <unistd.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
4 #include <ctype.h>
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
5 #include <string.h>
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
6 #include <glib.h>
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
7
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 188
diff changeset
8 #include "settings.h"
170
ea5e101fd29e [/trunk] Changeset 182 by mikael
mikael
parents: 169
diff changeset
9 #include "utils.h"
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
10
297
9bdfef4f4735 Add comment for the cfg_file() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
11 // cfg_file(filename)
9bdfef4f4735 Add comment for the cfg_file() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
12 // Read and parse config file "filename". If filename is NULL,
9bdfef4f4735 Add comment for the cfg_file() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
13 // try to open the configuration file at the default locations.
9bdfef4f4735 Add comment for the cfg_file() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
14 //
9bdfef4f4735 Add comment for the cfg_file() function
Mikael Berthe <mikael@lilotux.net>
parents: 279
diff changeset
15 // This function comes from Cabber, and has been slightly modified.
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
16 int cfg_file(char *filename)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
17 {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
18 FILE *fp;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
19 char *buf;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
20 char *line;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
21 char *value;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
22
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
23 if (!filename) {
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
24 // Use default config file locations
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
25 char *home = getenv("HOME");
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
26 if (!home) {
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
27 ut_WriteLog("Can't find home dir!\n");
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
28 exit(EXIT_FAILURE);
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
29 }
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
30 filename = g_new(char, strlen(home)+24);
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
31 sprintf(filename, "%s/.mcabber/mcabberrc", home);
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
32 if ((fp = fopen(filename, "r")) == NULL) {
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
33 // 2nd try...
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
34 sprintf(filename, "%s/.mcabberrc", home);
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
35 if ((fp = fopen(filename, "r")) == NULL) {
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
36 fprintf(stderr, "Cannot open config file!\n");
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
37 exit(EXIT_FAILURE);
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
38 }
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
39 }
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
40 g_free(filename);
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
41 }
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
42 else if ((fp = fopen(filename, "r")) == NULL) {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
43 perror("fopen (parsecfg.c:46)");
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
44 exit(EXIT_FAILURE);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
45 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
46
170
ea5e101fd29e [/trunk] Changeset 182 by mikael
mikael
parents: 169
diff changeset
47 buf = g_new(char, 256);
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
48
170
ea5e101fd29e [/trunk] Changeset 182 by mikael
mikael
parents: 169
diff changeset
49 while (fgets(buf, 256, fp) != NULL) {
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
50 line = buf;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
51
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
52 while (isspace((int) *line))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
53 line++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
54
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
55 while ((strlen(line) > 0)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
56 && isspace((int) line[strlen(line) - 1]))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
57 line[strlen(line) - 1] = '\0';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
58
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
59 if ((*line == '\n') || (*line == '\0') || (*line == '#'))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
60 continue;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
61
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
62 if ((strchr(line, '=') != NULL)) {
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
63 value = strchr(line, '=');
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
64 *value = '\0';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
65 value++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
66
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
67 while (isspace((int) *value))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
68 value++;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
69
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
70 while ((strlen(line) > 0)
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
71 && isspace((int) line[strlen(line) - 1]))
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
72 line[strlen(line) - 1] = '\0';
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
73
279
f5dd437c057b Rewrite the settings system
Mikael Berthe <mikael@lilotux.net>
parents: 188
diff changeset
74 settings_set(SETTINGS_TYPE_OPTION, line, value);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
75 continue;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
76 }
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
77 fprintf(stderr, "CFG: orphaned line \"%s\"\n", line);
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
78 }
169
0ed6099b5a54 [/trunk] Changeset 181 by mikael
mikael
parents: 155
diff changeset
79 g_free(buf);
24
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
80 return 1;
e88b15cbf2de [/trunk] Changeset 40 by mikael
mikael
parents:
diff changeset
81 }