1 diff -ur conflib-0.4.5-/src/cl_assign.c conflib-0.4.5/src/cl_assign.c
2 --- conflib-0.4.5-/src/cl_assign.c Fri Oct 9 19:03:57 1998
3 +++ conflib-0.4.5/src/cl_assign.c Sat Oct 20 21:45:42 2001
5 "Value %s doesn't match %s %s.",
6 val,what,var->rangeexp);
10 +cl_in_current_locale(const char *varname)
12 + static const char *locale = NULL;
13 + static int locale_len = 0;
14 + static int locale_first_len = 0;
17 + if (locale == NULL) {
20 + if ((locale = getenv("LC_MESSAGES")) == NULL &&
21 + (locale = getenv("LC_ALL")) == NULL &&
22 + (locale = getenv("LANG")) == NULL)
24 + locale_len = strlen(locale);
25 + for (lp = locale; *lp; lp++, locale_first_len++)
30 + p = strchr(varname, '(');
34 + if (strcmp(p, "POSIX)") == 0 ||
35 + strcmp(p, "C)") == 0)
37 + if (strncmp(p, locale, locale_first_len) == 0 &&
38 + p[locale_first_len] == ')' &&
39 + p[locale_first_len+1] == 0)
40 + return 2; /* yes, better */
41 + if (strncmp(p, locale, locale_len) == 0 &&
42 + p[locale_len] == ')' &&
43 + p[locale_len+1] == 0)
44 + return 3; /* yes, even better */
49 cl_assign(cl_file_t *conf, cl_var_t *KonfTab,
51 const cl_enum_t *enump;
54 + char *nameptr = NULL;
55 if (0==strncmp(varname,"override ",9)) {
62 + if ((conf->mode&' ') == 0 && strchr(varname, ')')) {
63 + if (cl_in_current_locale(varname) == 0)
65 + nameptr = strdup(varname);
66 + *strchr(nameptr, '(') = 0;
71 for(Vp=KonfTab;Vp->varname;Vp++)
73 char c1=tolower(*varname);
76 Vp=cl_unalias(conf,KonfTab,Vp);
81 if (Vp->flags & CL_WARNING) {
82 cl_warning(CL_WARN(conf,Vp),"variable %s should not be used",
84 if (cl_fnmatch(Vp->rangeexp,value)!=0)
86 cl_as_dontmatch(conf,Vp,"wildcard", value);
93 cl_warning(CL_ERR(conf,Vp),
94 "cannot compile regular expression %s",
99 if (regexec(&exp,value,0,NULL,0)!=0)
101 cl_as_dontmatch(conf,Vp,"regular expression", value);
106 /* ### was hier zurückliefern? */
109 cl_warning(CL_ERR(conf,Vp),
110 "CL_ENUM nullpointer dereference!");
114 Vp->flags |= CL_MAY_SAVE;
115 for (enump=(const cl_enum_t *) Vp->secdata; enump->magic; enump++)
116 @@ -178,13 +227,13 @@
117 if (!strcasecmp(enump->magic,value))
119 *(long*)Vp->adr = enump->value;
124 cl_warning(CL_WARN(conf,Vp),
125 "unknown value %s for enumeration",value);
126 *(long*)Vp->adr = (long) 0;
127 - return 0; /* ### is this good? */
128 + goto return_0; /* ### is this good? */
134 cl_warning(CL_ERR(conf,Vp),
135 "CL_BITFIELD nullpointer dereference!");
139 Vp->flags |= CL_MAY_SAVE;
149 case CL_STRING: /* Stringvariable */
151 size_t l2=strlen(value);
152 char *s=malloc(l1+l2+2);
156 Vp->flags |= CL_MAY_SAVE;
157 memcpy(s,*(char **)Vp->adr,l1);
159 @@ -252,14 +301,14 @@
160 free (*(char **)Vp->adr);
162 Vp->flags|=CL_MALLOCED;
166 if (0==cl_dup_to(Vp,value))
168 Vp->flags |= CL_MAY_SAVE;
174 case CL_DIRNAME: /* Stringvariable */
183 memcpy(buf,value,l+1);
187 size_t l1=strlen(*(char **)Vp->adr);
188 char *s=malloc(l1+l+1);
192 Vp->flags |= CL_MAY_SAVE;
193 memcpy(s,*(char **)Vp->adr,l1);
194 memcpy(s+l1,buf,l+1);
195 @@ -287,23 +336,23 @@
198 Vp->flags|=CL_MALLOCED;
202 if (0==cl_dup_to(Vp,buf))
204 Vp->flags |= CL_MAY_SAVE;
215 cl_warning(CL_WARN(conf,Vp),"char desired, got string %s", value);
216 Vp->flags |= CL_MAY_SAVE;
217 *(char *)Vp->adr = *value;
221 Vp->flags |= CL_MAY_SAVE;
224 *(long*)Vp->adr = strtol(value,NULL,0);
230 Vp->flags |= CL_MAY_SAVE;
232 @@ -334,11 +383,11 @@
234 *(short*)Vp->adr = (int) lo;
239 Vp->flags |= CL_MAY_SAVE;
240 *(int *)Vp->adr=cl_convert2bool(value);
243 case CL_ARRAY: /* Stringarray */
246 @@ -354,10 +403,10 @@
249 cl_warning(CL_WARN(conf,Vp),"Array %s is full",Vp->varname);
253 Vp->flags |= CL_MAY_SAVE;
259 @@ -421,11 +470,11 @@
260 Vp->flags|=CL_MALLOCED;
262 Vp->flags |= CL_MAY_SAVE;
273 @@ -445,17 +494,17 @@
275 cl_warning(CL_ERR(conf,Vp),"out of memory");
285 dieser=malloc(sizeof(cl_ulist_t));
288 cl_warning(CL_ERR(conf,Vp),"out of memory");
292 dieser->varname=strdup(varname);
293 dieser->inhalt=strdup(value);
295 free(dieser->inhalt);
297 cl_warning(CL_ERR(conf,Vp),"out of memory");
303 @@ -473,12 +522,22 @@
311 if (conf->report_unknown)
312 cl_warning(CL_WARN(conf,Vp),
313 "unknown variable '%s'",varname);
327 diff -ur conflib-0.4.5-/src/cl_openconf.c conflib-0.4.5/src/cl_openconf.c
328 --- conflib-0.4.5-/src/cl_openconf.c Fri Oct 9 19:03:57 1998
329 +++ conflib-0.4.5/src/cl_openconf.c Sat Oct 20 21:16:56 2001
331 cl_openconf (const char *fname, const char *mode)
336 + if (*mode == 'l') {
341 if (*mode != 'r' && *mode != 'w') {
354 diff -ur conflib-0.4.5-/src/cl_putstanza.c conflib-0.4.5/src/cl_putstanza.c
355 --- conflib-0.4.5-/src/cl_putstanza.c Fri Oct 9 19:03:57 1998
356 +++ conflib-0.4.5/src/cl_putstanza.c Sat Oct 20 21:16:24 2001
358 char indent[256]="\t"; /* default to use if we don't read any line */
361 - if (conf->mode!='w')
362 + if ((conf->mode|' ')!='w')
364 cl_warning(CL_ERR(conf,NULL),