Changeset: 4a712ae6e676 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4a712ae6e676
Modified Files:
clients/mapiclient/dump.c
monetdb5/modules/atoms/json.c
Branch: nested
Log Message:
Merge with default branch.
diffs (truncated from 606 to 300 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1609,13 +1609,11 @@ describe_sequence(Mapi mid, const char *
if (schema == NULL) {
if ((sname = strchr(tname, '.')) != NULL) {
- size_t len = sname - tname + 1;
-
- sname = malloc(len);
+ size_t len = sname - tname;
+ sname = strndup(tname, len);
if (sname == NULL)
goto bailout;
- strtcpy(sname, tname, len);
- tname += len;
+ tname += len + 1;
} else if ((sname = get_schema(mid)) == NULL) {
return 1;
}
@@ -2171,15 +2169,14 @@ dump_table(Mapi mid, const char *schema,
if (schema == NULL) {
if ((sname = strchr(tname, '.')) != NULL) {
- size_t len = sname - tname + 1;
+ size_t len = sname - tname;
- sname = malloc(len);
+ sname = strndup(tname, len);
if (sname == NULL) {
fprintf(stderr, "malloc failure\n");
return 1;
}
- strtcpy(sname, tname, len);
- tname += len;
+ tname += len + 1;
} else if ((sname = get_schema(mid)) == NULL) {
return 1;
}
@@ -2607,13 +2604,12 @@ dump_functions(Mapi mid, stream *sqlf, c
/* no schema given, so figure it out */
const char *dot = strchr(fname, '.');
if (dot != NULL) {
- size_t len = dot - fname + 1;
+ size_t len = dot - fname;
- to_free = malloc(len);
+ to_free = strndup(fname, len);
if (to_free == NULL)
goto bailout;
- strtcpy(to_free, fname, len);
- fname += len;
+ fname += len + 1;
} else if ((to_free = get_schema(mid)) == NULL) {
return 1;
}
diff --git a/clients/mapilib/connect_unix.c b/clients/mapilib/connect_unix.c
--- a/clients/mapilib/connect_unix.c
+++ b/clients/mapilib/connect_unix.c
@@ -139,8 +139,10 @@ connect_socket_unix(Mapi mid)
mapi_log_record(mid, "CONN", "Connecting to Unix domain socket %s with
timeout %ld", sockname, timeout);
- struct sockaddr_un userver;
- if (strlen(sockname) >= sizeof(userver.sun_path)) {
+ struct sockaddr_un userver = {
+ .sun_family = AF_UNIX,
+ };
+ if (strtcpy(userver.sun_path, sockname, sizeof(userver.sun_path)) ==
-1) {
return mapi_printError(mid, __func__, MERROR, "path name '%s'
too long", sockname);
}
@@ -178,11 +180,6 @@ connect_socket_unix(Mapi mid)
// Attempt to connect
- userver = (struct sockaddr_un) {
- .sun_family = AF_UNIX,
- };
- strtcpy(userver.sun_path, sockname, sizeof(userver.sun_path));
-
if (connect(s, (struct sockaddr *) &userver, sizeof(struct
sockaddr_un)) == SOCKET_ERROR) {
closesocket(s);
return mapi_printError(
diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c
--- a/clients/mapilib/mapi.c
+++ b/clients/mapilib/mapi.c
@@ -3685,10 +3685,7 @@ mapi_query_part(MapiHdl hdl, const char
mid->active = hdl;
/* remember the query just for the error messages */
if (hdl->query == NULL) {
- hdl->query = malloc(size + 1);
- if (hdl->query) {
- strtcpy(hdl->query, query, size + 1);
- }
+ hdl->query = strndup(query, size);
} else {
size_t sz = strlen(hdl->query);
char *q;
@@ -4070,8 +4067,7 @@ unquote(const char *msg, char **str, con
p++;
}
len = s - msg;
- *str = malloc(len + 1);
- strtcpy(*str, msg, len + 1);
+ *str = strndup(msg, len);
if (next)
*next = p;
diff --git a/clients/odbc/driver/ODBCUtil.c b/clients/odbc/driver/ODBCUtil.c
--- a/clients/odbc/driver/ODBCUtil.c
+++ b/clients/odbc/driver/ODBCUtil.c
@@ -52,25 +52,6 @@ DllMain(HINSTANCE hinstDLL, DWORD reason
}
#endif
-/*
- * Utility function to duplicate an ODBC string (with a length
- * specified, may not be null terminated) to a normal C string (null
- * terminated).
- *
- * Precondition: inStr != NULL
- * Postcondition: returns a newly allocated null terminated string.
- */
-char *
-dupODBCstring(const SQLCHAR *inStr, size_t length)
-{
- char *tmp = (char *) malloc((length + 1) * sizeof(char));
-
- if (tmp == NULL)
- return NULL;
- strtcpy(tmp, (const char *) inStr, length + 1);
- return tmp;
-}
-
/* Convert a SQLWCHAR (UTF-16 encoded string) to UTF-8. On success,
clears the location pointed to by errmsg and returns NULL or a
newly allocated buffer. On error, assigns a string with an error
diff --git a/clients/odbc/driver/ODBCUtil.h b/clients/odbc/driver/ODBCUtil.h
--- a/clients/odbc/driver/ODBCUtil.h
+++ b/clients/odbc/driver/ODBCUtil.h
@@ -44,7 +44,11 @@
* Precondition: inStr != NULL
* Postcondition: returns a newly allocated null terminated string
*/
-extern char *dupODBCstring(const SQLCHAR *inStr, size_t length);
+static inline char *
+dupODBCstring(const SQLCHAR *inStr, size_t length)
+{
+ return strndup((const char *) inStr, length);
+}
/*
* Utility macro to fix up args that represent an ODBC string. If len
diff --git a/clients/odbc/driver/SQLDriverConnect.c
b/clients/odbc/driver/SQLDriverConnect.c
--- a/clients/odbc/driver/SQLDriverConnect.c
+++ b/clients/odbc/driver/SQLDriverConnect.c
@@ -55,10 +55,9 @@ ODBCGetKeyAttr(const SQLCHAR **conn, SQL
if (*nconn == 0 || !**conn || **conn == ';')
return 0;
len = *conn - p;
- *key = (char *) malloc(len + 1);
+ *key = strndup((const char *) p, len);
if (*key == NULL)
return -1;
- strtcpy(*key, (char *) p, len + 1);
(*conn)++;
(*nconn)--;
p = *conn;
@@ -72,13 +71,12 @@ ODBCGetKeyAttr(const SQLCHAR **conn, SQL
(*nconn)--;
}
len = *conn - p;
- *attr = (char *) malloc(len + 1);
+ *attr = strndup((const char *) p, len);
if (*attr == NULL) {
free(*key);
*key = NULL;
return -1;
}
- strtcpy(*attr, (char *) p, len + 1);
(*conn)++;
(*nconn)--;
/* should check that *nconn == 0 || **conn == ';' */
@@ -88,13 +86,12 @@ ODBCGetKeyAttr(const SQLCHAR **conn, SQL
(*nconn)--;
}
len = *conn - p;
- *attr = (char *) malloc(len + 1);
+ *attr = strndup((const char *) p, len);
if (*attr == NULL) {
free(*key);
*key = NULL;
return -1;
}
- strtcpy(*attr, (char *) p, len + 1);
}
if (*nconn > 0 && **conn) {
(*conn)++;
diff --git a/clients/odbc/driver/SQLGetDiagField.c
b/clients/odbc/driver/SQLGetDiagField.c
--- a/clients/odbc/driver/SQLGetDiagField.c
+++ b/clients/odbc/driver/SQLGetDiagField.c
@@ -36,7 +36,7 @@
size_t _l; \
if (len < 0) \
return SQL_ERROR; \
- _l = strlcpy((char *) buf, str, len); \
+ _l = strlcpy((char *) buf, str, len); \
if (lenp) \
*lenp = (SQLSMALLINT) _l; \
if (buf == NULL || _l >= (size_t) len) \
diff --git a/cmake/monetdb-defines.cmake b/cmake/monetdb-defines.cmake
--- a/cmake/monetdb-defines.cmake
+++ b/cmake/monetdb-defines.cmake
@@ -103,6 +103,8 @@ function(monetdb_configure_defines)
check_function_exists("siglongjmp" HAVE_SIGLONGJMP)
check_function_exists("stpcpy" HAVE_STPCPY)
check_function_exists("strlcpy" HAVE_STRLCPY)
+ check_function_exists("strndup" HAVE_STRNDUP)
+ check_function_exists("strnlen" HAVE_STRNLEN)
check_function_exists("strptime" HAVE_STRPTIME)
check_symbol_exists("sysconf" "unistd.h" HAVE_SYSCONF)
check_function_exists("task_info" HAVE_TASK_INFO)
diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c
--- a/common/utils/msabaoth.c
+++ b/common/utils/msabaoth.c
@@ -1196,8 +1196,7 @@ msab_deserialise(sabdb **ret, const char
"string does not contain dbname: %s", sdb);
return(strdup(buf));
}
- dbname = malloc(lasts - sdb + 1);
- strtcpy(dbname, sdb, lasts - sdb + 1);
+ dbname = strndup(sdb, lasts - sdb);
sdb = ++lasts;
lasts = strchr(sdb, ',');
if (lasts == NULL) {
@@ -1206,8 +1205,7 @@ msab_deserialise(sabdb **ret, const char
free(dbname);
return(strdup(buf));
}
- uri = malloc(lasts - sdb + 1);
- strtcpy(uri, sdb, lasts - sdb + 1);
+ uri = strndup(sdb, lasts - sdb);
sdb = ++lasts;
int locked, state, n;
switch (sscanf(sdb, "%d,%d%n", &locked, &state, &n)) {
@@ -1239,8 +1237,7 @@ msab_deserialise(sabdb **ret, const char
return(strdup(buf));
}
if (lasts > sdb) {
- scens = malloc(lasts - sdb + 1);
- strtcpy(scens, sdb, lasts - sdb + 1);
+ scens = strndup(sdb, lasts - sdb);
} else {
scens = NULL;
}
diff --git a/common/utils/mstring.c b/common/utils/mstring.c
--- a/common/utils/mstring.c
+++ b/common/utils/mstring.c
@@ -50,14 +50,15 @@ strtconcat(char *restrict dst, size_t n,
return -1;
}
va_start(ap, src);
- while (src && dst) {
+ while (src) {
dst = stpecpy(dst, end, src);
+ if (dst == NULL) {
+ va_end(ap);
+ errno = E2BIG;
+ return -1;
+ }
src = va_arg(ap, const char *);
}
va_end(ap);
- if (dst == NULL) {
- errno = E2BIG;
- return -1;
- }
return dst - (end - n);
}
diff --git a/common/utils/mstring.h b/common/utils/mstring.h
--- a/common/utils/mstring.h
+++ b/common/utils/mstring.h
@@ -51,6 +51,33 @@
* stpe*: chainable with end-of-buffer pointer.
*/
+#ifndef HAVE_STRNLEN
+__attribute__((__nonnull__(1)))
+static inline size_t
+strnlen(const char *s, size_t n)
+{
+ for (size_t i = 0; i < n; i++)
+ if (s[i] == 0)
+ return i;
+ return n;
+}
+#endif
+
+#ifndef HAVE_STRNDUP
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]