Changeset: 008947889f2f for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=008947889f2f Modified Files: monetdb5/extras/rdf/rdflabels.c Branch: rdf Log Message:
GDKfree strings that are allocated by takeOid() diffs (283 lines): diff --git a/monetdb5/extras/rdf/rdflabels.c b/monetdb5/extras/rdf/rdflabels.c --- a/monetdb5/extras/rdf/rdflabels.c +++ b/monetdb5/extras/rdf/rdflabels.c @@ -312,27 +312,45 @@ IncidentFKs* initLinks(int csCount) { return links; } -/* Modifies the parameter! */ -/* from: <URI>/ or <URI> to: URI */ +/* from: <URI>/ or <URI/> or <URI> or URI/ to: URI */ static -void removeBrackets(char** s) { - if (strlen(*s) < 2) return; +str removeBrackets(char* s) { + str retStr; - if ((*s)[0] == '<' && (*s)[strlen(*s) - 2] == '>' && (*s)[strlen(*s) - 1] == '/') { + if (s[0] == '<' && s[strlen(s) - 2] == '>' && s[strlen(s) - 1] == '/') { // case <URI>/ - (*s)[strlen(*s) - 2] = '\0'; - (*s) += 1; - } else if ((*s)[0] == '<' && (*s)[strlen(*s) - 2] == '/' && (*s)[strlen(*s) - 1] == '>') { + retStr = (str) GDKmalloc(strlen(s) - 2); + if (!retStr) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); + strncpy(retStr, s + 1, strlen(s) - 3); + retStr[strlen(s) - 3] = '\0'; + return retStr; + } else if (s[0] == '<' && s[strlen(s) - 2] == '/' && s[strlen(s) - 1] == '>') { // case <URI/> - (*s)[strlen(*s) - 2] = '\0'; - (*s) += 1; - } else if ((*s)[0] == '<' && (*s)[strlen(*s) - 1] == '>') { + retStr = (str) GDKmalloc(strlen(s) - 2); + if (!retStr) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); + strncpy(retStr, s + 1, strlen(s) - 3); + retStr[strlen(s) - 3] = '\0'; + return retStr; + } else if (s[0] == '<' && s[strlen(s) - 1] == '>') { // case <URI> - (*s)[strlen(*s) - 1] = '\0'; - (*s) += 1; - } else if ((*s)[strlen(*s) - 1] == '/') { + retStr = (str) GDKmalloc(strlen(s) - 1); + if (!retStr) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); + strncpy(retStr, s + 1, strlen(s) - 2); + retStr[strlen(s) - 2] = '\0'; + return retStr; + } else if (s[strlen(s) - 1] == '/') { // case URI/ - (*s)[strlen(*s) - 1] = '\0'; + retStr = (str) GDKmalloc(strlen(s)); + if (!retStr) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); + strncpy(retStr, s + 1, strlen(s) - 1); + retStr[strlen(s) - 1] = '\0'; + return retStr; + } else { + // copy + retStr = (str) GDKmalloc(strlen(s) + 1); + if (!retStr) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); + strcpy(retStr, s); + return retStr; } } @@ -567,8 +585,7 @@ void createTypeAttributesHistogram(BAT * BUN p, q; oid *sbt, *obt, *pbt; char objType; - str propStr, objStr; - char *objStrPtr; + str propStr, objStr, tmpStr; char *start, *end; int length; @@ -620,9 +637,8 @@ void createTypeAttributesHistogram(BAT * if (objType == URI || objType == BLANKNODE) { objOid = objOid - ((oid)objType << (sizeof(BUN)*8 - 4)); - takeOid(objOid, &objStr); - removeBrackets(&objStr); - objStrPtr = objStr; + takeOid(objOid, &tmpStr); + objStr = removeBrackets(tmpStr); } else { objOid = objOid - (objType*2 + 1) * RDF_MIN_LITERAL; /* Get the real objOid from Map or Tokenizer */ bun = BUNfirst(mapbat); @@ -633,19 +649,15 @@ void createTypeAttributesHistogram(BAT * end = strrchr(objStr, '"'); if (start != NULL && end != NULL) { length = end - start; - objStrPtr = (char *) malloc(sizeof(char) * (length + 1)); - if (!objStrPtr) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); - memcpy(objStrPtr, start, length); - objStrPtr[length] = '\0'; - } else { - objStrPtr = objStr; + objStr++; + objStr[length] = '\0'; } } // add object to histogram fit = 0; for (j = 0; j < typeAttributesHistogramCount[csFreqIdx][i]; ++j) { - if (strcmp(typeAttributesHistogram[csFreqIdx][i][j].value, objStrPtr) == 0) { + if (strcmp(typeAttributesHistogram[csFreqIdx][i][j].value, objStr) == 0) { // bucket exists typeAttributesHistogram[csFreqIdx][i][j].freq += 1; fit = 1; @@ -660,16 +672,19 @@ void createTypeAttributesHistogram(BAT * if (!typeAttributesHistogram[csFreqIdx][i]) fprintf(stderr, "ERROR: Couldn't realloc memory!\n"); // insert value - typeAttributesHistogram[csFreqIdx][i][typeAttributesHistogramCount[csFreqIdx][i] - 1].value = (str) malloc(sizeof(char)*(strlen(objStrPtr)+1)); + typeAttributesHistogram[csFreqIdx][i][typeAttributesHistogramCount[csFreqIdx][i] - 1].value = (str) malloc(sizeof(char)*(strlen(objStr)+1)); if (!typeAttributesHistogram[csFreqIdx][i][typeAttributesHistogramCount[csFreqIdx][i] - 1].value) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); - strcpy(typeAttributesHistogram[csFreqIdx][i][typeAttributesHistogramCount[csFreqIdx][i] - 1].value, objStrPtr); + strcpy(typeAttributesHistogram[csFreqIdx][i][typeAttributesHistogramCount[csFreqIdx][i] - 1].value, objStr); typeAttributesHistogram[csFreqIdx][i][typeAttributesHistogramCount[csFreqIdx][i] - 1].freq = 1; } - - if (!(objType == URI || objType == BLANKNODE)) free(objStrPtr); // malloc, therefore free + if (objType == URI || objType == BLANKNODE) { + GDKfree(tmpStr); // allocated by takeOid() + GDKfree(objStr); // allocated by removeBrackets() + } break; } } + GDKfree(propStr); } // sort descending by frequency @@ -769,10 +784,10 @@ str** findOntologies(CS cs, int *propOnt char **tokenizedUri = NULL; char *token; // token, modified during tokenization char *uri; // uri, modified during tokenization - str propStr; + str propStr, tmpStr; - takeOid(cs.lstProp[j], &propStr); - removeBrackets(&propStr); + takeOid(cs.lstProp[j], &tmpStr); + propStr = removeBrackets(tmpStr); uri = (char *) malloc(sizeof(char) * (strlen(propStr) + 1)); if (!uri) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); strcpy(uri, propStr); @@ -810,6 +825,7 @@ str** findOntologies(CS cs, int *propOnt for (k = 0; k < length; ++k) { free(tokenizedUri[k]); } + GDKfree(tmpStr); free(tokenizedUri); } } @@ -1121,7 +1137,7 @@ void createOntologyLookupResult(str** re /* Print the dot code to draw an UML-like diagram. Call: dot -Tpdf -O <filename> to create <filename>.pdf */ static void printUML(CSset *freqCSset, int typeAttributesCount, TypeAttributesFreq*** typeAttributesHistogram, int** typeAttributesHistogramCount, str** result, int* resultCount, IncidentFKs* links, Labels* labels, Relation*** relationMetadata, int** relationMetadataCount, int freqThreshold) { - str propStr; + str propStr, tmpStr; int ret; char* schema = "rdf"; @@ -1280,14 +1296,13 @@ void printUML(CSset *freqCSset, int type } strcat(resultStr, "<FONT color=\"green\">"); for (j = 0; j < links[i].num; ++j) { - str propStr; char *temp = NULL; #if USE_SHORT_NAMES char *resultShort = NULL; #endif - takeOid(links[i].fks[j].prop, &propStr); - removeBrackets(&propStr); + takeOid(links[i].fks[j].prop, &tmpStr); + propStr = removeBrackets(tmpStr); #if USE_SHORT_NAMES getPropNameShort(&resultShort, propStr); temp = (char *) malloc(sizeof(char) * (strlen(resultShort) + 3)); @@ -1298,6 +1313,9 @@ void printUML(CSset *freqCSset, int type if (!temp) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); sprintf(temp, "%s, ", propStr); #endif + GDKfree(tmpStr); + GDKfree(propStr); + // resize resultStr ? while (strlen(resultStr) + strlen(temp) + 1 > resultStrSize) { // + 1 for \0 resultStrSize *= 2; @@ -1345,10 +1363,11 @@ void printUML(CSset *freqCSset, int type #if USE_SHORT_NAMES char *propStrShort = NULL; #endif - takeOid(cs.lstProp[j], &propStr); + + takeOid(cs.lstProp[j], &tmpStr); // copy propStr to propStrEscaped because .dot-PORTs cannot contain colons and quotes - removeBrackets(&propStr); + propStr = removeBrackets(tmpStr); propStrEscaped = (char *) malloc(sizeof(char) * (strlen(propStr) + 1)); if (!propStrEscaped) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); memcpy(propStrEscaped, propStr, (strlen(propStr) + 1)); @@ -1363,6 +1382,8 @@ void printUML(CSset *freqCSset, int type #else fprintf(fout, "<TR><TD PORT=\"%s\">%s</TD></TR>\n", propStrEscaped, propStr); #endif + GDKfree(tmpStr); + GDKfree(propStr); free(propStrEscaped); } @@ -1377,10 +1398,11 @@ void printUML(CSset *freqCSset, int type #if USE_SHORT_NAMES char *propStrShort = NULL; #endif - takeOid(cs.lstProp[j], &propStr); + + takeOid(cs.lstProp[j], &tmpStr); // copy propStr to propStrEscaped because .dot-PORTs cannot contain colons and quotes - removeBrackets(&propStr); + propStr = removeBrackets(tmpStr); propStrEscaped = (char *) malloc(sizeof(char) * (strlen(propStr) + 1)); if (!propStrEscaped) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); memcpy(propStrEscaped, propStr, (strlen(propStr) + 1)); @@ -1402,6 +1424,8 @@ void printUML(CSset *freqCSset, int type #endif } } + GDKfree(tmpStr); + GDKfree(propStr); free(propStrEscaped); } } @@ -1529,15 +1553,17 @@ void getTableName(char** name, int csIdx // --- FK --- // incident foreign keys --> use the one with the most occurances (num and freq) if (links[csIdx].num > 0) { - str propStr; - takeOid(links[csIdx].fks[0].prop, &propStr); // sorted - removeBrackets(&propStr); + str propStr, tmpStr; + takeOid(links[csIdx].fks[0].prop, &tmpStr); // sorted + propStr = removeBrackets(tmpStr); #if USE_SHORT_NAMES getPropNameShort(name, propStr); #else (*name) = (char *) malloc(sizeof(char) * (strlen(propStr) + 1)); strcpy(*name, propStr); #endif + GDKfree(tmpStr); + GDKfree(propStr); return; } @@ -1584,12 +1610,12 @@ void getAllLabels(Labels* labels, CSset* labels[i].lstProp = (str *) malloc(sizeof(str) * cs.numProp); if (!labels[i].lstProp) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); for (j = 0; j < cs.numProp; ++j) { - str propStr; + str propStr, tmpStr; #if USE_SHORT_NAMES char *propStrShort = NULL; #endif - takeOid(cs.lstProp[j], &propStr); - removeBrackets(&propStr); + takeOid(cs.lstProp[j], &tmpStr); + propStr = removeBrackets(tmpStr); #if USE_SHORT_NAMES getPropNameShort(&propStrShort, propStr); labels[i].lstProp[j] = (char *) malloc(sizeof(char) * (strlen(propStrShort) + 1)); @@ -1600,6 +1626,8 @@ void getAllLabels(Labels* labels, CSset* if (!labels[i].lstProp[j]) fprintf(stderr, "ERROR: Couldn't malloc memory!\n"); memcpy(labels[i].lstProp[j], propStr, sizeof(char) * (strlen(propStr) + 1)); #endif + GDKfree(tmpStr); + GDKfree(propStr); } } } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list