Changeset: ba6efa9727e4 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba6efa9727e4 Modified Files: sql/backends/monet5/sql_result.c Branch: Jan2014 Log Message:
Some layout and some error checking.
diffs (truncated from 305 to 300 lines):
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -34,49 +34,61 @@
#define llabs(x) ((x) < 0 ? -(x) : (x))
#endif
-#define DEC_TOSTR(X) \
- char buf[32]; \
- X v = *(const X*)a; \
- int scale = (int)(ptrdiff_t)extra, cur = 31, neg = (v<0)?1:0, i, done =
0; \
- int l; \
- if (v == X##_nil) { \
- if (*len < 5){ \
- if (*Buf) \
- GDKfree(*Buf); \
- *len = 5; \
- *Buf = GDKmalloc(*len); \
- } \
- strcpy(*Buf, "NULL"); \
- return 4; \
- } \
- if (v<0) \
- v = -v; \
- buf[cur--] = 0; \
- if (scale){ \
- for (i=0; i<scale; i++) { \
- buf[cur--] = (char) (v%10 + '0'); \
- v /= 10; \
- } \
- buf[cur--] = '.'; \
- } \
- while (v) { \
- buf[cur--] = (char ) (v%10 + '0'); \
- v /= 10; \
- done = 1; \
- } \
- if (!done) \
- buf[cur--] = '0'; \
- if (neg) \
- buf[cur--] = '-'; \
- l = (32-cur-1); \
- if (*len < l){ \
- if (*Buf) \
- GDKfree(*Buf); \
- *len = l+1; \
- *Buf = GDKmalloc(*len); \
- } \
- strcpy(*Buf, buf+cur+1); \
- return l-1;
+#define DEC_TOSTR(TYPE)
\
+ do { \
+ char buf[32]; \
+ TYPE v = *(const TYPE *) a; \
+ int scale = (int) (ptrdiff_t) extra; \
+ int cur = 31, i, done = 0; \
+ int neg = v < 0; \
+ int l; \
+ if (v == TYPE##_nil) { \
+ if (*len < 5){ \
+ if (*Buf) \
+ GDKfree(*Buf); \
+ *len = 5; \
+ *Buf = GDKmalloc(*len); \
+ if (*Buf == NULL) { \
+ GDKerror("Allocation failed\n"); \
+ return 0; \
+ } \
+ } \
+ strcpy(*Buf, "NULL"); \
+ return 4; \
+ } \
+ if (v<0) \
+ v = -v; \
+ buf[cur--] = 0; \
+ if (scale){ \
+ for (i=0; i<scale; i++) { \
+ buf[cur--] = (char) (v%10 + '0'); \
+ v /= 10; \
+ } \
+ buf[cur--] = '.'; \
+ } \
+ while (v) { \
+ buf[cur--] = (char ) (v%10 + '0'); \
+ v /= 10; \
+ done = 1; \
+ } \
+ if (!done) \
+ buf[cur--] = '0'; \
+ if (neg) \
+ buf[cur--] = '-'; \
+ l = (32-cur-1); \
+ if (*len < l){ \
+ if (*Buf) \
+ GDKfree(*Buf); \
+ *len = l+1; \
+ *Buf = GDKmalloc(*len); \
+ if (*Buf == NULL) { \
+ GDKerror("Allocation failed\n"); \
+ return 0; \
+ } \
+ } \
+ strcpy(*Buf, buf+cur+1); \
+ return l-1; \
+ } while (0)
static int
dec_tostr(void *extra, char **Buf, int *len, int type, const void *a)
@@ -130,6 +142,10 @@ sql_time_tostr(void *TS_RES, char **buf,
if (*buf)
GDKfree(*buf);
*buf = (str) GDKmalloc(*len = 4);
+ if (*buf == NULL) {
+ GDKerror("Allocation failed\n");
+ return 0;
+ }
}
strcpy(*buf, s1);
return len1;
@@ -144,6 +160,10 @@ sql_time_tostr(void *TS_RES, char **buf,
if (*buf)
GDKfree(*buf);
*buf = (str) GDKmalloc(*len = len1 + 8);
+ if (*buf == NULL) {
+ GDKerror("Allocation failed\n");
+ return 0;
+ }
}
s = *buf;
strcpy(s, buf1);
@@ -191,6 +211,10 @@ sql_timestamp_tostr(void *TS_RES, char *
if (*buf)
GDKfree(*buf);
*buf = (str) GDKmalloc(*len = len1 + len2 + 8);
+ if (*buf == NULL) {
+ GDKerror("Allocation failed\n");
+ return 0;
+ }
}
s = *buf;
strcpy(s, buf1);
@@ -356,58 +380,61 @@ bat_max_lnglength(BAT *b)
return ret;
}
-#define DEC_FRSTR(X) \
- sql_column *col = c->extra; \
- sql_subtype *t = &col->type; \
- \
- unsigned int i, neg = 0; \
- X *r; \
- X res = 0; \
- if (*s == '-'){ \
- neg = 1; \
- s++; \
- } else if (*s == '+'){ \
- neg = 0; \
- s++; \
- } \
- for (i = 0; *s && *s != '.' && ((res == 0 && *s == '0') || i <
t->digits - t->scale); s++) { \
- if (!*s || *s < '0' || *s > '9') \
- return NULL; \
- res *= 10; \
- res += (*s-'0'); \
- if (res) \
- i++; \
- } \
- if (!*s && t->scale) { \
- for( i = 0; i < t->scale; i++) { \
- res *= 10; \
- } \
- } \
- if (*s) { \
- if (*s != '.') \
- return NULL; \
- s++; \
- for( i = 0; *s && i < t->scale; i++, s++) { \
- if (*s < '0' || *s > '9') \
- return NULL; \
- res *= 10; \
- res += (*s-'0'); \
- } \
- for( ; i < t->scale; i++) { \
- res *= 10; \
- } \
- } \
- if (*s) \
- return NULL; \
- r = c->data; \
- if (!r) \
- r = (X*)GDKmalloc(sizeof(X)); \
- c->data = r; \
- if (neg) \
- *r = -res; \
- else \
- *r = res; \
- return (void *) r;
+#define DEC_FRSTR(X) \
+ do { \
+ sql_column *col = c->extra; \
+ sql_subtype *t = &col->type; \
+ \
+ unsigned int i, neg = 0; \
+ X *r; \
+ X res = 0; \
+ if (*s == '-'){ \
+ neg = 1; \
+ s++; \
+ } else if (*s == '+'){ \
+ neg = 0; \
+ s++; \
+ } \
+ for (i = 0; *s && *s != '.' && ((res == 0 && *s == '0') || i <
t->digits - t->scale); s++) { \
+ if (!*s || *s < '0' || *s > '9') \
+ return NULL; \
+ res *= 10; \
+ res += (*s-'0'); \
+ if (res) \
+ i++; \
+ } \
+ if (!*s && t->scale) { \
+ for( i = 0; i < t->scale; i++) { \
+ res *= 10; \
+ } \
+ } \
+ if (*s) { \
+ if (*s != '.') \
+ return NULL; \
+ s++; \
+ for (i = 0; *s && i < t->scale; i++, s++) { \
+ if (*s < '0' || *s > '9') \
+ return NULL; \
+ res *= 10; \
+ res += *s - '0'; \
+ } \
+ for (; i < t->scale; i++) { \
+ res *= 10; \
+ } \
+ } \
+ if (*s) \
+ return NULL; \
+ r = c->data; \
+ if (r == NULL && \
+ (r = GDKmalloc(sizeof(X))) == NULL) \
+ return NULL; \
+ c->data = r; \
+ if (neg) \
+ *r = -res; \
+ else \
+ *r = res; \
+ return (void *) r; \
+ } while (0)
static void *
dec_frstr(Column *c, int type, const char *s, const char *e, char quote)
@@ -481,8 +508,8 @@ sec_frstr(Column *c, int type, const cha
if (*s)
return NULL;
r = c->data;
- if (r == NULL)
- r = (lng *) GDKmalloc(sizeof(lng));
+ if (r == NULL && (r = (lng *) GDKmalloc(sizeof(lng))) == NULL)
+ return NULL;
c->data = r;
if (neg)
*r = -res;
@@ -502,8 +529,15 @@ static void *
/* or shouldn't len rather be ssize_t, here? */
if (c->len < len) {
+ void *p;
c->len = len;
- c->data = GDKrealloc(c->data, len);
+ if ((p = GDKrealloc(c->data, len)) == NULL) {
+ GDKfree(c->data);
+ c->data = NULL;
+ c->len = 0;
+ return NULL;
+ }
+ c->data = p;
}
if (s == e) {
@@ -561,6 +595,10 @@ static int
GDKfree(*buf);
*len = 2 * l + 3;
*buf = GDKmalloc(*len);
+ if (*buf == NULL) {
+ GDKerror("Allocation failed\n");
+ return 0;
+ }
}
dst = *buf;
if (c->quote) {
@@ -648,6 +686,10 @@ mvc_import_table(Client cntxt, mvc *m, b
as.tryall = 0;
as.complaints = NULL;
fmt = as.format = (Column *) GDKmalloc(sizeof(Column) *
(as.nr_attrs + 1));
+ if (fmt == NULL) {
+ sql_error(m, 500, "failed to allocate memory ");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
