chiark
/
gitweb
/
~ian
/
userv.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7100fe9
)
Fixed failure to save pathnames in a couple of places in parser.c; Fix failure to...
author
ian
<ian>
Sat, 30 Jan 1999 21:45:19 +0000
(21:45 +0000)
committer
ian
<ian>
Sat, 30 Jan 1999 21:45:19 +0000
(21:45 +0000)
parser.c
patch
|
blob
|
history
diff --git
a/parser.c
b/parser.c
index e49b5ca6895b86e6a3782bf9cc9c5b78ff2e0226..e73b4c5a56f97d6a927c03e416ffe29c3f786838 100644
(file)
--- a/
parser.c
+++ b/
parser.c
@@
-986,14
+986,16
@@
int df_includedirectory(int dtoken) {
int r, cpl, tel, c, found;
DIR *d;
struct dirent *de;
int r, cpl, tel, c, found;
DIR *d;
struct dirent *de;
- const char *p, *cp;
+ const char *p, *cpget;
+ char *cp;
- r= paa_1path(&cp); if (r) return r;
- d= opendir(cp);
+ r= paa_1path(&cp
get
); if (r) return r;
+ d= opendir(cp
get
);
if (!d) {
if (!d) {
- parseerrprint("unable to open directory `%s': %s",cp,strerror(errno));
+ parseerrprint("unable to open directory `%s': %s",cp
get
,strerror(errno));
return tokv_error;
}
return tokv_error;
}
+ cp= xstrsave(cpget);
cpl= strlen(cp);
while ((de= readdir(d))) {
tel= strlen(de->d_name);
cpl= strlen(cp);
while ((de= readdir(d))) {
tel= strlen(de->d_name);
@@
-1002,60
+1004,72
@@
int df_includedirectory(int dtoken) {
if (!*p || !isalnum(*p)) continue;
while ((c= *++p)) if (!(isalnum(c) || c=='-')) break;
if (c) continue;
if (!*p || !isalnum(*p)) continue;
while ((c= *++p)) if (!(isalnum(c) || c=='-')) break;
if (c) continue;
- if (makeroom(&buildbuf,&buildbuflen,cpl+1+tel+1))
- return stringoverflow("pathname in directory");
+ if (makeroom(&buildbuf,&buildbuflen,cpl+1+tel+1)) {
+ stringoverflow("pathname in directory");
+ r= tokv_error; goto x_err;
+ }
snyprintf(buildbuf,buildbuflen,"%s/%s",cp,de->d_name);
snyprintf(buildbuf,buildbuflen,"%s/%s",cp,de->d_name);
- r= parse_file(buildbuf,&found); if (r)
{ closedir(d); return r; }
+ r= parse_file(buildbuf,&found); if (r)
goto x_err;
if (!found) {
parseerrprint("unable to open file `%s' in included directory `%s': %s",
de->d_name,cp,strerror(errno));
if (!found) {
parseerrprint("unable to open file `%s' in included directory `%s': %s",
de->d_name,cp,strerror(errno));
- closedir(d);
- return tokv_error;
+ r= tokv_error; goto x_err;
}
}
if (closedir(d)) {
parseerrprint("error closing directory `%s': %s",cp,strerror(errno));
}
}
if (closedir(d)) {
parseerrprint("error closing directory `%s': %s",cp,strerror(errno));
+ free(cp);
return tokv_error;
}
return tokv_error;
}
+ free(cp);
return 0;
return 0;
+
+x_err:
+ closedir(d);
+ free(cp);
+ return r;
}
int df_includelookup(int dtoken) {
static char *buildbuf=0;
int buildbuflen=0;
}
int df_includelookup(int dtoken) {
static char *buildbuf=0;
int buildbuflen=0;
- char **parmvalues, **pp, *p, *q;
- const char *cp;
+ char **parmvalues, **pp, *p, *q
, *cp
;
+ const char *cp
get
;
struct stat stab;
int r, done, thisdone, cpl, c;
r= pa_mwsp(); if (r) return r;
r= pa_parameter(&parmvalues,0); if (r) return r;
struct stat stab;
int r, done, thisdone, cpl, c;
r= pa_mwsp(); if (r) return r;
r= pa_parameter(&parmvalues,0); if (r) return r;
- r= paa_1path(&cp); if (r) { freecharparray(parmvalues); return r; }
- if (stat(cp,&stab)) {
- parseerrprint("unable to access directory `%s': %s",cp,strerror(errno));
+ r= paa_1path(&cp
get
); if (r) { freecharparray(parmvalues); return r; }
+ if (stat(cp
get
,&stab)) {
+ parseerrprint("unable to access directory `%s': %s",cp
get
,strerror(errno));
freecharparray(parmvalues); return tokv_error;
}
if (!S_ISDIR(stab.st_mode)) {
freecharparray(parmvalues); return tokv_error;
}
if (!S_ISDIR(stab.st_mode)) {
- parseerrprint("object `%s' is not a directory or link to one",cp);
+ parseerrprint("object `%s' is not a directory or link to one",cp
get
);
freecharparray(parmvalues); return tokv_error;
}
done= 0;
freecharparray(parmvalues); return tokv_error;
}
done= 0;
+ cp= xstrsave(cpget);
cpl= strlen(cp);
if (!parmvalues[0]) {
cpl= strlen(cp);
if (!parmvalues[0]) {
- if (makeroom(&buildbuf,&buildbuflen,cpl+1+sizeof(NONEINCLUDELOOKUP)))
- return stringoverflow("pathname in directory for lookup of undefined parameter");
+ if (makeroom(&buildbuf,&buildbuflen,cpl+1+sizeof(NONEINCLUDELOOKUP))) {
+ stringoverflow("pathname in directory for lookup of undefined parameter");
+ r= tokv_error; goto x_err;
+ }
snyprintf(buildbuf,buildbuflen,"%s/" NONEINCLUDELOOKUP,cp);
snyprintf(buildbuf,buildbuflen,"%s/" NONEINCLUDELOOKUP,cp);
- r= parse_file(buildbuf,&thisdone);
- if (r) { freecharparray(parmvalues); return r; }
+ r= parse_file(buildbuf,&thisdone); if (r) goto x_err;
if (thisdone) done= 1;
} else {
for (pp=parmvalues;
*pp && (!done || dtoken == tokv_word_includelookupall);
pp++) {
if (makeroom(&buildbuf,&buildbuflen,
if (thisdone) done= 1;
} else {
for (pp=parmvalues;
*pp && (!done || dtoken == tokv_word_includelookupall);
pp++) {
if (makeroom(&buildbuf,&buildbuflen,
- cpl+1+strlen(*pp)*2+3+sizeof(EMPTYINCLUDELOOKUP)+1))
- return stringoverflow("pathname in directory for lookup");
+ cpl+1+strlen(*pp)*2+3+sizeof(EMPTYINCLUDELOOKUP)+1)) {
+ stringoverflow("pathname in directory for lookup");
+ r= tokv_error; goto x_err;
+ }
strcpy(buildbuf,cp);
p= *pp; q= buildbuf+cpl;
*q++= '/';
strcpy(buildbuf,cp);
p= *pp; q= buildbuf+cpl;
*q++= '/';
@@
-1071,19
+1085,25
@@
int df_includelookup(int dtoken) {
*q++= 0;
}
r= parse_file(buildbuf,&thisdone);
*q++= 0;
}
r= parse_file(buildbuf,&thisdone);
- if (r)
{ freecharparray(parmvalues); return r; }
+ if (r)
goto x_err;
if (thisdone) done= 1;
}
}
if (thisdone) done= 1;
}
}
- freecharparray(parmvalues);
if (!done) {
if (makeroom(&buildbuf,&buildbuflen,
if (!done) {
if (makeroom(&buildbuf,&buildbuflen,
- cpl+1+sizeof(DEFAULTINCLUDELOOKUP)))
- return stringoverflow("pathname in directory for lookup of default");
+ cpl+1+sizeof(DEFAULTINCLUDELOOKUP))) {
+ stringoverflow("pathname in directory for lookup of default");
+ r= tokv_error; goto x_err;
+ }
snyprintf(buildbuf,buildbuflen,"%s/" DEFAULTINCLUDELOOKUP,cp);
snyprintf(buildbuf,buildbuflen,"%s/" DEFAULTINCLUDELOOKUP,cp);
- r= parse_file(buildbuf,0); if (r)
return
r;
+ r= parse_file(buildbuf,0); if (r)
goto x_er
r;
}
}
- return 0;
+ r= 0;
+
+x_err:
+ freecharparray(parmvalues);
+ free(cp);
+ return r;
}
/* Control constructs */
}
/* Control constructs */