Changeset: 801a4ecc0819 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=801a4ecc0819
Modified Files:
monetdb5/modules/mal/tokenizer.c
Branch: Feb2013
Log Message:
Fix for Bug 3206.
Tokenizer should not wrap ourput strings to language specific syntax sych as
<../>.
diffs (92 lines):
diff --git a/monetdb5/modules/mal/tokenizer.c b/monetdb5/modules/mal/tokenizer.c
--- a/monetdb5/modules/mal/tokenizer.c
+++ b/monetdb5/modules/mal/tokenizer.c
@@ -449,15 +449,17 @@ TKNZRlocate(Client cntxt, MalBlkPtr mb,
}
static str
-takeOid(oid id, str *ret, size_t *totlen, str fcn)
+takeOid(oid id, str *val)
{
int i, depth;
str parts[MAX_TKNZR_DEPTH];
size_t lngth = 0;
str s;
+
if (id >= BATcount(tokenBAT[INDEX])) {
- throw(MAL, fcn, OPERATION_FAILED " illegal oid");
+ throw(MAL, "tokenizer.takeOid", OPERATION_FAILED " illegal
oid");
}
+
id = *(oid *) Tloc(tokenBAT[INDEX], id);
depth = GET_d(id);
@@ -470,23 +472,16 @@ takeOid(oid id, str *ret, size_t *totlen
lngth += strlen(parts[i]);
}
- if (*totlen < lngth + depth + 3) {
- if (*ret)
- GDKfree(*ret);
- *totlen = lngth + depth + 3;
- *ret = (str) GDKmalloc(*totlen);
- if (*ret == NULL)
- throw(MAL, "tokenizer.takeOid", OPERATION_FAILED "
malloc failed");
- }
- s = *ret;
- *s++ = '<';
+ *val = (str) GDKmalloc(lngth+depth+1);
+ s = *val;
+
for (i = 0; i < depth; i++) {
strcpy(s, parts[i]);
s += strlen(parts[i]);
*s++ = '/';
}
- *s++ = '>';
*s = '\0';
+
return MAL_SUCCEED;
}
@@ -494,7 +489,6 @@ str
TKNZRtakeOid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
str ret, val = NULL;
- size_t l = 0;
oid id;
(void) cntxt;
(void) mb;
@@ -503,14 +497,13 @@ TKNZRtakeOid(Client cntxt, MalBlkPtr mb,
throw(MAL, "tokenizer", "no tokenizer store open");
}
id = *(oid *) getArgReference(stk, pci, 1);
- ret = takeOid(id, &val, &l, "tokenizer.takeOid");
+ ret = takeOid(id, &val);
if (ret == MAL_SUCCEED) {
VALset(getArgReference(stk, pci, 0), TYPE_str, val);
}
return ret;
}
-
str
TKNZRrdf2str(bat *res, bat *bid, bat *map)
{
@@ -518,7 +511,6 @@ TKNZRrdf2str(bat *res, bat *bid, bat *ma
BATiter bi, mi;
BUN p, q;
str s = NULL;
- size_t l = 0;
b = BATdescriptor(*bid);
if (b == NULL) {
@@ -558,7 +550,7 @@ TKNZRrdf2str(bat *res, bat *bid, bat *ma
}
s = (str) BUNtail(mi, pos);
} else {
- str ret = takeOid(id, &s, &l, "tokenizer.rdf2str");
+ str ret = takeOid(id, &s);
if (ret != MAL_SUCCEED) {
BBPunfix(*bid);
BBPunfix(*map);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list