本文整理汇总了C++中GDKmalloc函数的典型用法代码示例。如果您正苦于以下问题:C++ GDKmalloc函数的具体用法?C++ GDKmalloc怎么用?C++ GDKmalloc使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GDKmalloc函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: JSONtoString
int
JSONtoString(str *s, int *len, json src)
{
size_t cnt;
char *c, *dst;
if (GDK_STRNIL(src)) {
if (*s == NULL || *len < 4) {
GDKfree(*s);
*len = 4;
*s = GDKmalloc(4);
if (*s == NULL)
return -1;
}
strncpy(*s, "nil", 4);
return 3;
}
/* count how much space we need for the output string */
cnt = 3; /* two times " plus \0 */
for (c = src; *c; c++)
switch (*c) {
case '"':
case '\\':
case '\n':
cnt++;
/* fall through */
default:
cnt++;
break;
}
if (cnt > (size_t) *len) {
GDKfree(*s);
*s = (str) GDKmalloc(cnt);
if (*s == NULL)
return 0;
*len = (int) cnt;
}
dst = *s;
*dst++ = '"';
for (c = src; *c; c++) {
switch (*c) {
case '"':
case '\\':
*dst++ = '\\';
/* fall through */
default:
*dst++ = *c;
break;
case '\n':
*dst++ = '\\';
*dst++ = 'n';
break;
}
}
*dst++ = '"';
*dst++ = 0;
assert((size_t) (dst - *s) == cnt);
return (int) (cnt - 1); /* length without \0 */
}
示例2: MATproject_any
static BAT *
MATproject_any( BAT *map, BAT **bats, int len )
{
BAT *res;
int i;
BUN j, cnt = BATcount(map);
BATiter *bats_i;
BUN *batsT;
bte *mapT;
res = BATnew(TYPE_void, bats[0]->ttype, cnt, TRANSIENT);
batsT = (BUN*)GDKmalloc(sizeof(BUN) * len);
bats_i = (BATiter*)GDKmalloc(sizeof(BATiter) * len);
if (res == NULL || batsT == NULL || bats_i == NULL) {
if (res)
BBPreclaim(res);
if (batsT)
GDKfree(batsT);
if (bats_i)
GDKfree(bats_i);
return NULL;
}
BATseqbase(res, map->hseqbase);
mapT = (bte*)Tloc(map, 0);
for (i=0; i<len; i++) {
batsT[i] = 0;
bats_i[i] = bat_iterator(bats[i]);
}
for (j=0; j<cnt; j++)
BUNappend(res, BUNtail(bats_i[mapT[j]], batsT[mapT[j]]++), FALSE);
GDKfree(batsT);
GDKfree(bats_i);
return res;
}
示例3: mal2str
/* Remote execution of MAL calls for more type/property information to be exchanged */
str
mal2str(MalBlkPtr mb, int first, int last)
{
str ps = NULL, *txt;
int i, *len, totlen = 0, j;
txt = GDKmalloc(sizeof(str) * mb->stop);
len = GDKmalloc(sizeof(int) * mb->stop);
if( txt == NULL || len == NULL){
addMalException(mb,"mal2str: " MAL_MALLOC_FAIL);
GDKfree(txt);
GDKfree(len);
return NULL;
}
for (i = first; i < last; i++) {
if( i == 0)
txt[i] = instruction2str(mb, 0, getInstrPtr(mb, i), LIST_MAL_NAME | LIST_MAL_TYPE | LIST_MAL_PROPS);
else
txt[i] = instruction2str(mb, 0, getInstrPtr(mb, i), LIST_MAL_CALL | LIST_MAL_PROPS | LIST_MAL_REMOTE);
#ifdef _DEBUG_LISTING_
fprintf(stderr,"%s\n",txt[i]);
#endif
if ( txt[i])
totlen += len[i] = (int)strlen(txt[i]);
else {
addMalException(mb,"mal2str: " MAL_MALLOC_FAIL);
GDKfree(len);
for (j = first; j < i; j++)
GDKfree(txt[j]);
GDKfree(txt);
return NULL;
}
}
ps = GDKmalloc(totlen + mb->stop + 1);
if( ps == NULL){
addMalException(mb,"mal2str: " MAL_MALLOC_FAIL);
GDKfree(len);
for (i = first; i < last; i++)
GDKfree(txt[i]);
GDKfree(txt);
return NULL;
}
totlen = 0;
for (i = first; i < last; i++) {
if( txt[i]){
strncpy(ps + totlen, txt[i], len[i]);
ps[totlen + len[i]] = '\n';
ps[totlen + len[i] + 1] = 0;
totlen += len[i] + 1;
GDKfree(txt[i]);
}
}
GDKfree(len);
GDKfree(txt);
return ps;
}
示例4: BATXMLdocument
str
BATXMLdocument(bat *ret, const bat *bid)
{
BAT *b, *bn;
BUN p, q;
BATiter bi;
size_t size = BUFSIZ;
str buf = GDKmalloc(size);
const char *err = OPERATION_FAILED;
if (buf == NULL)
throw(MAL,"xml.document",MAL_MALLOC_FAIL);
if ((b = BATdescriptor(*bid)) == NULL) {
GDKfree(buf);
throw(MAL, "xml.document", INTERNAL_BAT_ACCESS);
}
prepareResult(bn, b, TYPE_xml, "document", GDKfree(buf));
bi = bat_iterator(b);
BATloop(b, p, q) {
const char *t = (const char *) BUNtail(bi, p);
xmlDocPtr doc;
int len;
xmlChar *s;
if (strNil(t)) {
bunfastapp(bn, str_nil);
bn->T->nonil = 0;
continue;
}
len = (int) strlen(t);
doc = xmlParseMemory(t, len);
if (doc == NULL) {
err = OPERATION_FAILED XML_PARSE_ERROR;
goto bunins_failed;
}
xmlDocDumpMemory(doc, &s, &len);
xmlFreeDoc(doc);
if ((size_t) len + 2 >= size) {
GDKfree(buf);
size = (size_t) len + 128;
buf = GDKmalloc(size);
if (buf == NULL) {
err= MAL_MALLOC_FAIL;
goto bunins_failed;
}
}
buf[0] = 'D';
strcpy(buf + 1, (char *) s);
bunfastapp(bn, buf);
}
GDKfree(buf);
finalizeResult(ret, bn, b);
return MAL_SUCCEED;
bunins_failed:
GDKfree(buf);
BBPunfix(b->batCacheid);
BBPunfix(bn->batCacheid);
throw(MAL, "xml.document", "%s", err);
}
示例5: sql_time_tostr
static int
sql_time_tostr(void *TS_RES, char **buf, int *len, int type, ptr A)
{
struct time_res *ts_res = TS_RES;
int i, len1, big = 128;
char buf1[128], *s1 = buf1, *s;
lng val = 0, timezone = ts_res->timezone;
daytime tmp, *a = A;
daytime mtime = 24 * 60 * 60 * 1000;
(void) type;
if (ts_res->has_tz)
val = *a + timezone;
else
val = *a;
if (val < 0)
val = mtime + val;
if (val > mtime)
val = val - mtime;
tmp = (daytime) val;
len1 = daytime_tostr(&s1, &big, &tmp);
if (len1 == 3 && strcmp(s1, "nil") == 0) {
if (*len < 4 || *buf == NULL) {
if (*buf)
GDKfree(*buf);
*buf = (str) GDKmalloc(*len = 4);
}
strcpy(*buf, s1);
return len1;
}
/* fixup the fraction, default is 3 */
len1 += (ts_res->fraction-3);
if (ts_res->fraction == 0)
len1 --;
if (*len < len1 + 8) {
if (*buf)
GDKfree(*buf);
*buf = (str) GDKmalloc(*len = len1 + 8);
}
s = *buf;
strcpy(s, buf1);
s += len1;
s[0] = 0;
/* extra zero's for usec's */
for (i=3; i<ts_res->fraction; i++)
s[-i+2] = '0';
if (ts_res->has_tz) {
timezone = ts_res->timezone/60000;
*s++ = (ts_res->timezone >= 0) ? '+' : '-';
sprintf(s, "%02d:%02d", ABS(timezone) / 60, ABS(timezone) % 60);
s += 5;
}
return (int) (s - *buf);
}
示例6: BATXMLcomment
str
BATXMLcomment(bat *ret, const bat *bid)
{
BAT *b, *bn;
BUN p, q;
size_t size = BUFSIZ;
str buf = GDKmalloc(size);
BATiter bi;
const char *err= OPERATION_FAILED;
if (buf == NULL)
throw(MAL, "xml.comment", MAL_MALLOC_FAIL);
if ((b = BATdescriptor(*bid)) == NULL) {
GDKfree(buf);
throw(MAL, "xml.comment", INTERNAL_BAT_ACCESS);
}
prepareResult(bn, b, TYPE_xml, "comment", GDKfree(buf));
bi = bat_iterator(b);
BATloop(b, p, q) {
const char *t = (const char *) BUNtail(bi, p);
size_t len;
if (strNil(t)) {
bunfastapp(bn, str_nil);
bn->T->nonil = 0;
continue;
}
if (strstr(t, "--") != NULL) {
err = XML_COMMENT_ERROR;
goto bunins_failed;
}
len = strlen(t);
if (len + 9 >= size) {
/* make sure there is enough space */
size = len + 128;
/* free/malloc so we don't copy */
GDKfree(buf);
buf = GDKmalloc(size);
if (buf == NULL) {
err = MAL_MALLOC_FAIL;
goto bunins_failed;
}
}
snprintf(buf, size, "C<!--%s-->", t);
bunfastapp(bn, buf);
}
GDKfree(buf);
finalizeResult(ret, bn, b);
return MAL_SUCCEED;
bunins_failed:
BBPunfix(b->batCacheid);
BBPunfix(bn->batCacheid);
if (buf != NULL)
GDKfree(buf);
throw(MAL, "xml.comment", "%s", err);
}
示例7: BATXMLstr2xml
/*
* The core of the activity is str2xml, where the actual strings
* are constructed.
* To avoid repetitive copying we make sure that the garbage
* collector does not remove the xml intermediates.
* This way, we know that as long as the xml-variables are not
* reused, the complete structure of the xml document(s) are available.
* We merely have to collect the pieces.
* [FOR LATER, FIRST GO FOR THE EASY IMPLEMENTATION]
* XML values are represented by strings already.
*/
str
BATXMLstr2xml(bat *ret, const bat *bid)
{
BAT *b, *bn;
BUN p, q;
size_t size = BUFSIZ;
str buf;
const char *err= OPERATION_FAILED;
BATiter bi;
buf = GDKmalloc(size);
if (buf == NULL)
throw(MAL,"xml.str2xml",MAL_MALLOC_FAIL);
if ((b = BATdescriptor(*bid)) == NULL) {
GDKfree(buf);
throw(MAL, "xml.xml", INTERNAL_BAT_ACCESS);
}
prepareResult(bn, b, TYPE_xml, "xml", GDKfree(buf));
bi = bat_iterator(b);
BATloop(b, p, q) {
const char *t = (const char *) BUNtail(bi, p);
size_t len;
if (strNil(t)) {
bunfastapp(bn, str_nil);
bn->T->nonil = 0;
continue;
}
len = strlen(t) * 6 + 1;
if (size < len) {
size = len + 128;
GDKfree(buf);
buf = GDKmalloc(size);
if (buf == NULL) {
err = MAL_MALLOC_FAIL;
goto bunins_failed;
}
}
buf[0] = 'C';
XMLquotestring(t, buf + 1, size - 1);
bunfastapp(bn, buf);
}
GDKfree(buf);
finalizeResult(ret, bn, b);
return MAL_SUCCEED;
bunins_failed:
BBPunfix(b->batCacheid);
BBPunfix(bn->batCacheid);
if (buf != NULL)
GDKfree(buf);
throw(MAL, "xml.xml", "%s", err);
}
示例8: malFcnMatch
/*
* Matching a block calls for building two variable lists used.
* The isomorphism can be determined after-wards using a single scan.
* The candidate block is matched with mb starting at a given pc.
* The candidate block is expected to defined as a function, including
* a signature and end-statement. They are ignored in the comparison
*
* Beware, the variables in the block being removed, could be
* used furtheron in the program. [tricky to detect, todo]
*/
static int
malFcnMatch(MalBlkPtr mc, MalBlkPtr mb, int pc)
{
int i, j, k, lim;
int *cvar, *mvar;
int ctop = 0, mtop = 0;
InstrPtr p, q;
if (mb->stop - pc < mc->stop - 2)
return 0;
cvar = (int *) GDKmalloc(mc->vtop * mc->maxarg * sizeof(*cvar));
if (cvar == NULL)
return 0;
mvar = (int *) GDKmalloc(mb->vtop * mc->maxarg * sizeof(*mvar));
if (mvar == NULL){
GDKfree(cvar);
return 0;
}
/* also trim the return statement */
lim = pc + mc->stop - 3;
k = 1;
for (i = pc; i < lim; i++, k++) {
p = getInstrPtr(mb, i);
q = getInstrPtr(mc, k);
if (malMatch(p, q) == 0){
GDKfree(cvar);
GDKfree(mvar);
return 0;
}
for (j = 0; j < p->argc; j++)
cvar[ctop++] = getArg(p, j);
for (j = 0; j < q->argc; j++)
mvar[mtop++] = getArg(q, j);
}
assert(mtop == ctop); /*shouldn't happen */
for (i = 0; i < ctop; i++)
for (j = i + 1; j < ctop; j++)
if ((cvar[i] == cvar[j]) != (mvar[i] == mvar[j])) {
GDKfree(cvar);
GDKfree(mvar);
return 0;
}
GDKfree(cvar);
GDKfree(mvar);
return 1;
}
示例9: unescape_str
/* COMMAND "unescape": Convert hexadecimal representations to ASCII characters.
* All sequences of the form "% HEX HEX" are unescaped.
* SIGNATURE: unescape(str) : str; */
str
unescape_str(str *retval, str s)
{
int x, y;
str res;
if (!s)
throw(ILLARG, "url.escape", "url missing");
res = (str) GDKmalloc(strlen(s));
if (!res)
throw(MAL, "url.unescape", "malloc failed");
for (x = 0, y = 0; s[x]; ++x, ++y) {
if (s[x] == '%') {
res[y] = x2c(&s[x + 1]);
x += 2;
} else {
res[y] = s[x];
}
}
res[y] = '\0';
*retval = GDKrealloc(res, strlen(res)+1);
return MAL_SUCCEED;
}
示例10: color_tostr
int
color_tostr(char **colorStr, int *len, color *c)
{
color sc = *c;
#ifdef DEBUG_COLOR
printf("* color_tostr:\n");
printf(" - *len: %d\n", *len);
printf(" - c: %X\n", *c);
#endif
/* allocate and fill a new string */
if (*len < 11) {
GDKfree(*colorStr);
*colorStr = GDKmalloc(11);
*len = 11;
}
if (sc == color_nil) {
strcpy(*colorStr, "nil");
return 3;
}
snprintf(*colorStr, *len, "0x%08X", (unsigned int) sc);
#ifdef DEBUG_COLOR
printf(" = *colorStr: %s\n", *colorStr);
printf(" = *len: %d\n", *len);
#endif
return (int) strlen(*colorStr);
}
示例11: URLgetUser
/* COMMAND "getUser": Extract the user identity from the URL
* SIGNATURE: getUser(str) : str; */
str
URLgetUser(str *retval, url *val)
{
const char *s;
const char *p;
const char *u;
if (val == NULL || *val == NULL)
throw(ILLARG, "url.getUser", "url missing");
if ((s = skip_scheme(*val)) == NULL ||
(p = skip_authority(s, NULL, NULL, NULL, NULL)) == NULL ||
(s = skip_path(p, NULL, NULL)) == NULL)
throw(ILLARG, "url.getUser", "bad url");
if (p == s || *p != '/' || p[1] != '~') {
*retval = GDKstrdup(str_nil);
} else {
size_t l;
u = p + 2;
for (p = u; p < s && *p != '/'; p++)
;
l = p - u;
if ((*retval = GDKmalloc(l + 1)) != NULL) {
strncpy(*retval, u, l);
(*retval)[l] = 0;
}
}
if (*retval == NULL)
throw(MAL, "url.getUser", "Allocation failed");
return MAL_SUCCEED;
}
示例12: URLgetPort
/* COMMAND "getPort": Extract the port id from the URL
* SIGNATURE: getPort(str) : str; */
str
URLgetPort(str *retval, url *val)
{
const char *s;
const char *p = NULL;
if (val == NULL || *val == NULL)
throw(ILLARG, "url.getPort", "url missing");
if ((s = skip_scheme(*val)) == NULL ||
(s = skip_authority(s, NULL, NULL, NULL, &p)) == NULL)
throw(ILLARG, "url.getPort", "bad url");
if (p == NULL) {
*retval = GDKstrdup(str_nil);
} else {
size_t l = s - p;
if ((*retval = GDKmalloc(l + 1)) != NULL) {
strncpy(*retval, p, l);
(*retval)[l] = 0;
}
}
if (*retval == NULL)
throw(MAL, "url.getPort", "Allocation failed");
return MAL_SUCCEED;
}
示例13: URLgetQuery
/* COMMAND "getQuery": Extract the query part from the URL
* SIGNATURE: getQuery(str) : str; */
str
URLgetQuery(str *retval, url *val)
{
const char *s;
const char *q;
if (val == NULL || *val == NULL)
throw(ILLARG, "url.getQuery", "url missing");
if ((s = skip_scheme(*val)) == NULL ||
(s = skip_authority(s, NULL, NULL, NULL, NULL)) == NULL ||
(q = skip_path(s, NULL, NULL)) == NULL ||
(s = skip_search(q)) == NULL)
throw(ILLARG, "url.getQuery", "bad url");
if (*q == '?') {
size_t l;
q++;
l = s - q;
if ((*retval = GDKmalloc(l + 1)) != NULL) {
strncpy(*retval, q, l);
(*retval)[l] = 0;
}
} else {
*retval = GDKstrdup(str_nil);
}
if (*retval == NULL)
throw(MAL, "url.getQuery", "Allocation failed");
return MAL_SUCCEED;
}
示例14: URLgetDomain
/* COMMAND "getDomain": Extract the Internet domain from the URL
* SIGNATURE: getDomain(str) : str; */
str
URLgetDomain(str *retval, url *val)
{
const char *s;
const char *h = NULL;
const char *p = NULL;
if (val == NULL || *val == NULL)
throw(ILLARG, "url.getDomain", "url missing");
if ((s = skip_scheme(*val)) == NULL ||
(s = skip_authority(s, NULL, NULL, &h, &p)) == NULL)
throw(ILLARG, "url.getDomain", "bad url");
if (h == NULL) {
*retval = GDKstrdup(str_nil);
} else {
size_t l;
if (p != NULL)
p--;
else
p = s;
l = 0;
while (p > h && p[-1] != '.') {
p--;
l++;
}
if ((*retval = GDKmalloc(l + 1)) != NULL) {
strncpy(*retval, p, l);
(*retval)[l] = 0;
}
}
if (*retval == NULL)
throw(MAL, "url.getDomain", "Allocation failed");
return MAL_SUCCEED;
}
示例15: URLgetExtension
/* COMMAND "getExtension": Extract the file extension of the URL
* SIGNATURE: getExtension(str) : str; */
str
URLgetExtension(str *retval, url *val)
{
const char *s;
const char *e = NULL;
if (val == NULL || *val == NULL)
throw(ILLARG, "url.getExtension", "url missing");
if ((s = skip_scheme(*val)) == NULL ||
(s = skip_authority(s, NULL, NULL, NULL, NULL)) == NULL ||
(s = skip_path(s, NULL, &e)) == NULL)
throw(ILLARG, "url.getExtension", "bad url");
if (e == NULL) {
*retval = GDKstrdup(str_nil);
} else {
size_t l = s - e;
assert(*e == '.');
if ((*retval = GDKmalloc(l)) != NULL) {
strncpy(*retval, e + 1, l - 1);
(*retval)[l - 1] = 0;
}
}
if (*retval == NULL)
throw(MAL, "url.getExtension", "Allocation failed");
return MAL_SUCCEED;
}