freebsd-ports/japanese/kon2-16dot/files/patch-lib_getcap.c
Daichi GOTO d5110194a5 - fixed the building on amd64
- fixed the building on 9+
 - clean-up patches

PR:		167724
Submitted by:	Masamichi Takatsu <taka2@doga.co.jp>
2012-05-09 19:28:24 +00:00

77 lines
2 KiB
C

--- lib/getcap.c.orig 1997-01-24 16:09:09.000000000 +0900
+++ lib/getcap.c 2012-05-10 00:14:28.822558096 +0900
@@ -73,8 +73,10 @@
fprintf(stderr, "cap %s redefined (default %s)\r\n", name,
def_value ? def_value : "None");
#endif
+ SafeFree(cp->name);
cp->name = strdup(name);
cp->func = func;
+ SafeFree(cp->def_value);
if (def_value)
cp->def_value = strdup(def_value);
return;
@@ -86,8 +88,10 @@
fprintf(stderr, "cap %s defined (default %s)\r\n", name,
def_value ? def_value : "None");
#endif
+ SafeFree(cp->name);
cp->name = strdup(name);
cp->func = func;
+ SafeFree(cp->def_value);
if (def_value)
cp->def_value = strdup(def_value);
return;
@@ -110,12 +114,9 @@
fprintf(stderr, "cap %s deleted\r\n", cp->name);
#endif
cp->initialized = 0;
- if (cp->name)
- free(cp->name);
- if (cp->arg)
- free(cp->arg);
- if (cp->def_value)
- free(cp->def_value);
+ SafeFree(cp->name);
+ SafeFree(cp->arg);
+ SafeFree(cp->def_value);
cp->name = cp->arg = cp->def_value = NULL;
}
}
@@ -149,10 +150,13 @@
if ((c = FindCap(p)) != NULL) {
/* Found matching capability. Get body from file. */
char *l = buf;
+ int bnum = 0;
while (fgets(line, MAX_COLS, capFp) != NULL
&& line[0] == '\t') {
char *l2 = line;
while (*l2 != '\n' && *l2 != '#') {
+ if (++bnum > BUF_SIZE - 2)
+ fatal("buffer overflow at configuration file\n");
*l++ = *l2++;
}
*l++ = '\n';
@@ -223,6 +227,7 @@
/* Protected capability. */
return FAILURE;
}
+ SafeFree(cp->arg);
cp->arg = strdup(value);
#ifdef DEBUG
fprintf(stderr, "Setting arg for %s to %s\r\n", capName, value);
@@ -234,8 +239,12 @@
bool BoolConf(const char *confstr)
{
- char name[MAX_COLS];
- sscanf(confstr, "%s", name);
+ char *name, *last, *sep = " \t\r\n";
+
+ name = strtok_r((char *)confstr, sep, &last);
+ if (name == NULL)
+ return FALSE;
+
if (strcasecmp(name, "On") == 0 ||
strcasecmp(name, "True") == 0) {
return TRUE;