Changeset: 015bdc204c26 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=015bdc204c26
Modified Files:
monetdb5/modules/mal/wlc.c
tools/merovingian/client/monetdb.c
tools/merovingian/daemon/argvcmds.c
tools/merovingian/daemon/forkmserver.c
tools/merovingian/utils/utils.c
Branch: default
Log Message:
Merge with Nov2019 branch.
diffs (261 lines):
diff --git a/tools/merovingian/client/monetdb.c
b/tools/merovingian/client/monetdb.c
--- a/tools/merovingian/client/monetdb.c
+++ b/tools/merovingian/client/monetdb.c
@@ -213,6 +213,7 @@ MEROgetStatus(sabdb **ret, char *databas
char *p;
char *buf;
char *e;
+ char *sp;
if (database == NULL)
database = "#all";
@@ -224,14 +225,14 @@ MEROgetStatus(sabdb **ret, char *databas
sw = malloc(sizeof(sabdb *) * swlen);
orig = NULL;
- if ((p = strtok(buf, "\n")) != NULL) {
+ if ((p = strtok_r(buf, "\n", &sp)) != NULL) {
if (strcmp(p, "OK") != 0) {
p = strdup(p);
free(buf);
free(sw);
return(p);
}
- for (swpos = 0; (p = strtok(NULL, "\n")) != NULL; swpos++) {
+ for (swpos = 0; (p = strtok_r(NULL, "\n", &sp)) != NULL;
swpos++) {
e = msab_deserialise(&stats, p);
if (e != NULL) {
printf("WARNING: failed to parse response from "
@@ -898,6 +899,7 @@ command_discover(int argc, char *argv[])
size_t posloc = 0;
size_t loclen = 0;
char **locations = malloc(sizeof(char*) * numlocs);
+ char *sp;
if (argc == 0) {
exit(2);
@@ -921,14 +923,14 @@ command_discover(int argc, char *argv[])
exit(2);
}
- if ((p = strtok(buf, "\n")) != NULL) {
+ if ((p = strtok_r(buf, "\n", &sp)) != NULL) {
if (strcmp(p, "OK") != 0) {
fprintf(stderr, "%s: %s\n", argv[0], p);
exit(1);
}
if (twidth > 0)
location = malloc(twidth + 1);
- while ((p = strtok(NULL, "\n")) != NULL) {
+ while ((p = strtok_r(NULL, "\n", &sp)) != NULL) {
if ((q = strchr(p, '\t')) == NULL) {
/* doesn't look correct */
printf("%s: WARNING: discarding incorrect line:
%s\n",
@@ -1376,9 +1378,10 @@ command_get(int argc, char *argv[])
} else {
/* check validity of properties before printing them */
if (stats == orig) {
+ char *sp;
snprintf(vbuf, sizeof(vbuf), "%s", property);
buf = vbuf;
- while ((p = strtok(buf, ",")) != NULL) {
+ while ((p = strtok_r(buf, ",", &sp)) != NULL) {
buf = NULL;
if (strcmp(p, "name") == 0)
continue;
@@ -1394,7 +1397,8 @@ command_get(int argc, char *argv[])
if (stats == orig)
printf(" name prop source
value\n");
- while ((p = strtok(buf, ",")) != NULL) {
+ char *sp;
+ while ((p = strtok_r(buf, ",", &sp)) != NULL) {
buf = NULL;
/* filter properties based on object type */
diff --git a/tools/merovingian/daemon/argvcmds.c
b/tools/merovingian/daemon/argvcmds.c
--- a/tools/merovingian/daemon/argvcmds.c
+++ b/tools/merovingian/daemon/argvcmds.c
@@ -209,7 +209,8 @@ command_get(confkeyval *ckv, int argc, c
}
printf(" property value\n");
- while ((p = strtok(property, ",")) != NULL) {
+ char *sp;
+ while ((p = strtok_r(property, ",", &sp)) != NULL) {
property = NULL;
if (strcmp(p, "dbfarm") == 0) {
value = dbfarm;
diff --git a/tools/merovingian/daemon/forkmserver.c
b/tools/merovingian/daemon/forkmserver.c
--- a/tools/merovingian/daemon/forkmserver.c
+++ b/tools/merovingian/daemon/forkmserver.c
@@ -223,7 +223,9 @@ forkMserver(char *database, sabdb** stat
char *argv[MAX_NR_ARGS+1]; /* for the exec arguments */
char property_other[1024];
int c = 0;
+ int freec = 0; /* from where to free entries
in argv */
unsigned int mport;
+ char *set = "--set";
er = msab_getStatus(stats, database);
if (er != NULL) {
@@ -557,35 +559,34 @@ forkMserver(char *database, sabdb** stat
_mero_hostname, mport, database);
argv[c++] = _mero_mserver;
argv[c++] = dbpath;
- argv[c++] = "--set"; argv[c++] = muri;
+ argv[c++] = set; argv[c++] = muri;
if (dbextra != NULL) {
snprintf(dbextra_path, sizeof(dbextra_path),
"--dbextra=%s", dbextra);
argv[c++] = dbextra_path;
}
if (mydoproxy) {
- struct sockaddr_un s; /* only for sizeof(s.sun_path) :( */
- argv[c++] = "--set"; argv[c++] = "mapi_open=false";
+ argv[c++] = set; argv[c++] = "mapi_open=false";
/* we "proxy", so we can just solely use UNIX domain sockets
* internally. Before we hit our head, check if we can
* actually use a UNIX socket (due to pathlength) */
- if (strlen((*stats)->path) + 11 < sizeof(s.sun_path)) {
+ if (strlen((*stats)->path) + 11 < sizeof(((struct sockaddr_un
*) 0)->sun_path)) {
snprintf(port, sizeof(port), "mapi_port=0");
snprintf(usock, sizeof(usock),
"mapi_usock=%s/.mapi.sock",
(*stats)->path);
} else {
- argv[c++] = "--set"; argv[c++] = "mapi_autosense=true";
+ argv[c++] = set; argv[c++] = "mapi_autosense=true";
/* for logic here, see comment below */
snprintf(port, sizeof(port), "mapi_port=%u", mport + 1);
snprintf(usock, sizeof(usock), "mapi_usock=");
}
} else {
if (listenaddr[0] != '\0') {
- argv[c++] = "--set"; argv[c++] = listenaddr;
+ argv[c++] = set; argv[c++] = listenaddr;
} else {
- argv[c++] = "--set"; argv[c++] = "mapi_open=true";
+ argv[c++] = set; argv[c++] = "mapi_open=true";
}
- argv[c++] = "--set"; argv[c++] = "mapi_autosense=true";
+ argv[c++] = set; argv[c++] = "mapi_autosense=true";
/* avoid this mserver binding to the same port as merovingian
* but on another interface, (INADDR_ANY ... sigh) causing
* endless redirects since 0.0.0.0 is not a valid address to
@@ -593,33 +594,33 @@ forkMserver(char *database, sabdb** stat
snprintf(port, sizeof(port), "mapi_port=%u", mport + 1);
snprintf(usock, sizeof(usock), "mapi_usock=");
}
- argv[c++] = "--set"; argv[c++] = ipv6;
- argv[c++] = "--set"; argv[c++] = port;
- argv[c++] = "--set"; argv[c++] = usock;
- argv[c++] = "--set"; argv[c++] = vaultkey;
+ argv[c++] = set; argv[c++] = ipv6;
+ argv[c++] = set; argv[c++] = port;
+ argv[c++] = set; argv[c++] = usock;
+ argv[c++] = set; argv[c++] = vaultkey;
if (nthreads[0] != '\0') {
- argv[c++] = "--set"; argv[c++] = nthreads;
+ argv[c++] = set; argv[c++] = nthreads;
}
if (nclients[0] != '\0') {
- argv[c++] = "--set"; argv[c++] = nclients;
+ argv[c++] = set; argv[c++] = nclients;
}
if (pipeline[0] != '\0') {
- argv[c++] = "--set"; argv[c++] = pipeline;
+ argv[c++] = set; argv[c++] = pipeline;
}
if (memmaxsize[0] != '\0') {
- argv[c++] = "--set"; argv[c++] = memmaxsize;
+ argv[c++] = set; argv[c++] = memmaxsize;
}
if (vmmaxsize[0] != '\0') {
- argv[c++] = "--set"; argv[c++] = vmmaxsize;
+ argv[c++] = set; argv[c++] = vmmaxsize;
}
if (embeddedr != NULL) {
- argv[c++] = "--set"; argv[c++] = embeddedr;
+ argv[c++] = set; argv[c++] = embeddedr;
}
if (embeddedpy != NULL) {
- argv[c++] = "--set"; argv[c++] = embeddedpy;
+ argv[c++] = set; argv[c++] = embeddedpy;
}
if (embeddedc != NULL) {
- argv[c++] = "--set"; argv[c++] = embeddedc;
+ argv[c++] = set; argv[c++] = embeddedc;
}
if (readonly != NULL) {
argv[c++] = readonly;
@@ -629,10 +630,15 @@ forkMserver(char *database, sabdb** stat
}
/* get the rest (non-default) mserver props set in the conf file */
list = ckv;
+ freec = c; /* following entries to
be freed if != set */
while (list->key != NULL) {
if (list->val != NULL && !defaultProperty(list->key)) {
- argv[c++] = "--set";
- snprintf(property_other, sizeof(property_other),
"%s=%s", list->key, list->val);
+ if (strcmp(list->key, "gdk_debug") == 0) {
+ snprintf(property_other,
sizeof(property_other), "-d%s", list->val);
+ } else {
+ argv[c++] = set;
+ snprintf(property_other,
sizeof(property_other), "%s=%s", list->key, list->val);
+ }
argv[c++] = strdup(property_other);
}
list++;
@@ -640,8 +646,19 @@ forkMserver(char *database, sabdb** stat
/* Let's get extra mserver5 args from the environment */
mserver5_extra = getenv("MSERVER5_EXTRA_ARGS");
- while (c < MAX_NR_ARGS && (mserver5_extra_token =
strsep(&mserver5_extra, " ")))
- argv[c++] = mserver5_extra_token;
+ if (mserver5_extra != NULL) {
+ /* work on copy of the environment value since strtok_r changes
it */
+ mserver5_extra = strdup(mserver5_extra);
+ if (mserver5_extra != NULL) {
+ char *sp = NULL;
+ mserver5_extra_token = strtok_r(mserver5_extra, " ",
&sp);
+ while (c < MAX_NR_ARGS && mserver5_extra_token != NULL)
{
+ argv[c++] = strdup(mserver5_extra_token);
+ mserver5_extra_token = strtok_r(NULL, " ", &sp);
+ }
+ free(mserver5_extra);
+ }
+ }
argv[c++] = NULL;
@@ -704,6 +721,12 @@ forkMserver(char *database, sabdb** stat
dp->dbname = strdup(database);
dp->flag = 0;
+ while (argv[freec] != NULL) {
+ if (argv[freec] != set)
+ free(argv[freec]);
+ freec++;
+ }
+
pthread_mutex_unlock(&_mero_topdp_lock);
/* wait for the child to finish starting, at some point we
diff --git a/tools/merovingian/utils/utils.c b/tools/merovingian/utils/utils.c
--- a/tools/merovingian/utils/utils.c
+++ b/tools/merovingian/utils/utils.c
@@ -96,10 +96,11 @@ readConfFileFull(confkeyval *list, FILE
while (fgets(buf, sizeof(buf), cnf) != NULL) {
if (strlen(buf) > 1 && buf[0] != '#') {
/* tokenize */
- key = strtok(buf, separator);
- val = strtok(NULL, separator);
+ char *sp;
+ key = strtok_r(buf, separator, &sp);
+ val = strtok_r(NULL, separator, &sp);
/* strip trailing newline */
- val = strtok(val, "\n");
+ val = strtok_r(val, "\n", &sp);
if ((err = setConfValForKey(t, key, val)) != NULL) {
if (strstr(err, "is not recognized") != NULL) {
/* If we already have PROPLENGTH
entries in the list, ignore
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list