void cg_list_clear(CgList *headList, CG_LIST_DESTRUCTORFUNC destructorFunc) { CgList *list; cg_log_debug_l5("Entering...\n"); if (NULL == headList) return; list = cg_list_next(headList); while(list != NULL) { cg_list_remove(list); //Theo Beisch: use destructorFunc or just free(listElement) if (destructorFunc != NULL){ destructorFunc(list); } else { free(list); } list = cg_list_next(headList); } /*** list header must be deleted by user ***/ /* free(headList); */ cg_log_debug_l5("Leaving...\n"); }
char *cg_string_replace(CgString *str, char *fromStr[], char *toStr[], size_t fromStrCnt) { char *orgValue = NULL; size_t orgValueLen = 0; int n = 0; int copyPos = 0; size_t *fromStrLen = NULL; CgString *repValue = NULL; BOOL isReplaced = FALSE; cg_log_debug_l5("Entering...\n"); if (NULL == str ) return NULL; repValue = cg_string_new(); fromStrLen = (size_t *)malloc(sizeof(size_t) * fromStrCnt); if ( NULL == fromStrLen ) { cg_string_delete(repValue); cg_log_debug_s("Memory allocation failure!\n"); return NULL; } for (n=0; n<fromStrCnt; n++) fromStrLen[n] = cg_strlen(fromStr[n]); orgValue = cg_string_getvalue(str); orgValueLen = cg_string_length(str); copyPos = 0; while (copyPos<orgValueLen) { isReplaced = FALSE; for (n=0; n<fromStrCnt; n++) { if (strncmp(fromStr[n], orgValue + copyPos, fromStrLen[n]) == 0) { cg_string_addvalue(repValue, toStr[n]); copyPos += fromStrLen[n]; isReplaced = TRUE; continue; } } if (isReplaced == TRUE) continue; cg_string_naddvalue(repValue, orgValue + copyPos, 1); copyPos++; } free(fromStrLen); cg_string_setvalue(str, cg_string_getvalue(repValue)); cg_string_delete(repValue); cg_log_debug_l5("Leaving...\n"); return cg_string_getvalue(str); }
char *cg_string_addvalue(CgString *str, const char *value) { cg_log_debug_l5("Entering...\n"); cg_log_debug_l5("Leaving...\n"); return cg_string_naddvalue(str, value, cg_strlen(value)); }
char *cg_string_getvalue(CgString *str) { cg_log_debug_l5("Entering...\n"); cg_log_debug_l5("Leaving...\n"); return (NULL != str) ? str->value : NULL; }
void cg_string_setlongvalue(CgString *str, long value) { char buf[CG_STRING_LONG_BUFLEN]; cg_log_debug_l5("Entering...\n"); cg_string_setvalue(str, cg_long2str(value, buf, sizeof(buf))); cg_log_debug_l5("Leaving...\n"); }
void cg_string_setintvalue(CgString *str, int value) { char buf[CG_STRING_INTEGER_BUFLEN]; cg_log_debug_l5("Entering...\n"); cg_string_setvalue(str, cg_int2str(value, buf, sizeof(buf))); cg_log_debug_l5("Leaving...\n"); }
void cg_string_setvalue(CgString *str, const char *value) { cg_log_debug_l5("Entering...\n"); if (NULL != str) { if (value != NULL) cg_string_setnvalue(str, value, cg_strlen(value)); } cg_log_debug_l5("Leaving...\n"); }
size_t cg_string_getmemorysize(CgString *str) { cg_log_debug_l5("Entering...\n"); if (NULL == str) return 0; cg_log_debug_l5("Leaving...\n"); return str->memSize; }
void cg_string_delete(CgString *str) { cg_log_debug_l5("Entering...\n"); if (NULL != str) { cg_string_clear(str); free(str); } cg_log_debug_l5("Leaving...\n"); }
char *cg_string_addrepvalue(CgString *str, const char *value, size_t repeatCnt) { int n; cg_log_debug_l5("Entering...\n"); for (n = 0; n < repeatCnt; n++) cg_string_addvalue(str, value); cg_log_debug_l5("Leaving...\n"); return cg_string_getvalue(str); }
void cg_list_node_init(CgList *list) { cg_log_debug_l5("Entering...\n"); if (NULL == list) return; list->headFlag = FALSE; list->prev = list->next = list; cg_log_debug_l5("Leaving...\n"); }
void cg_string_setpointervalue(CgString *str, char *value, size_t len) { cg_log_debug_l5("Entering...\n"); if (NULL != str) { cg_string_clear(str); str->value = value; str->valueSize = len; str->memSize = str->valueSize + 1; } cg_log_debug_l5("Leaving...\n"); }
char *cg_string_naddrepvalue(CgString *str, char *value, int valueLen, int repeatCnt) { int n; cg_log_debug_l5("Entering...\n"); for (n = 0; n < repeatCnt; n++) cg_string_naddvalue(str, value, valueLen); cg_log_debug_l5("Leaving...\n"); return cg_string_getvalue(str); }
size_t cg_string_length(CgString *str) { cg_log_debug_l5("Entering...\n"); if (NULL == str) return 0; if (str->value == NULL) return 0; cg_log_debug_l5("Leaving...\n"); return str->valueSize; }
void cg_string_clear(CgString *str) { cg_log_debug_l5("Entering...\n"); if (NULL != str) { if (str->value != NULL) { free(str->value); str->value = NULL; str->memSize = 0; str->valueSize = 0; } } cg_log_debug_l5("Leaving...\n"); }
void cg_list_remove(CgList *list) { cg_log_debug_l5("Entering...\n"); if (NULL == list) return; if ((NULL == list->prev) || (NULL == list->next)) return; list->prev->next = list->next; list->next->prev = list->prev; list->prev = list->next = list; cg_log_debug_l5("Leaving...\n"); }
void cg_list_add( CgList *headList, CgList *list) { cg_log_debug_l5("Entering...\n"); if ((NULL == headList) || (NULL == list)) return; if (NULL == headList->prev) return; cg_list_insert(headList->prev, list); cg_log_debug_l5("Leaving...\n"); }
void cg_list_insert( CgList *prevList, CgList *list) { cg_log_debug_l5("Entering...\n"); if ((NULL == prevList) || (NULL == list)) return; list->prev = prevList; list->next = prevList->next; prevList->next->prev = list; prevList->next = list; cg_log_debug_l5("Leaving...\n"); }
char *cg_string_naddvalue(CgString *str, const char *value, size_t valueLen) { char *newValue = NULL; size_t newMemSize = 0; cg_log_debug_l5("Entering...\n"); if (NULL == str) return NULL; if (value == NULL || valueLen <= 0) { /* Empty string, nothing to add */ return cg_string_getvalue(str); } /* Check, if we need to allocate memory for the new data */ newMemSize = str->valueSize + valueLen + 1; if (newMemSize > str->memSize || str->value == NULL) { /* realloc also some extra in order to avoid multiple reallocs */ newMemSize += CG_STRING_REALLOC_EXTRA; newValue = realloc(str->value, newMemSize * sizeof(char)); if (newValue == NULL) { /* Memory allocation failed, bail out */ return NULL; } str->memSize = newMemSize; str->value = newValue; } /* memcpy works better with non-zero-terminated data than strncpy */ memcpy(str->value + str->valueSize, value, valueLen); str->valueSize += valueLen; /* In case this is a string, append a termination character */ str->value[str->valueSize] = '\0'; cg_log_debug_l5("Leaving...\n"); return cg_string_getvalue(str); }
int cg_list_size(CgList *headList) { CgList *list; int listCnt; cg_log_debug_l5("Entering...\n"); if (NULL == headList) return 0; listCnt = 0; for (list = cg_list_next(headList); list != NULL; list = cg_list_next(list)) listCnt++; cg_log_debug_l5("Leaving...\n"); return listCnt; }
CgList *cg_list_next( CgList *list) { cg_log_debug_l5("Entering...\n"); if (NULL == list) return NULL; if (NULL == list->next) return NULL; if (list->next->headFlag == TRUE) return NULL; cg_log_debug_l5("Leaving...\n"); return list->next; }
CgList *cg_list_prev( CgList *list) { cg_log_debug_l5("Entering...\n"); if (NULL == list) return NULL; if (NULL == list->prev) return NULL; if (list->prev->headFlag == TRUE) return NULL; cg_log_debug_l5("Leaving...\n"); return list->prev; }
CgList *cg_list_prev_circular ( CgList *list) { cg_log_debug_l5("Entering...\n"); if (NULL == list) return NULL; if (NULL == list->prev) return NULL; if (list->prev->headFlag) list = list->prev; cg_log_debug_l5("Leaving...\n"); return list->prev; }
CgString *cg_string_new() { CgString *str; cg_log_debug_l5("Entering...\n"); str = (CgString *)malloc(sizeof(CgString)); if (NULL != str) { str->value = NULL; str->memSize = 0; str->valueSize = 0; } cg_log_debug_l5("Leaving...\n"); return str; }
CgList *cg_list_get(CgList *headList, int index) { CgList *list; int n; cg_log_debug_l5("Entering...\n"); if (NULL == headList) return NULL; list = cg_list_next(headList); for (n=0; n<index; n++) { if (NULL == list) break; list = cg_list_next(list); } cg_log_debug_l5("Leaving...\n"); return list; }
void cg_string_setnvalue(CgString *str, const char *value, size_t len) { cg_log_debug_l5("Entering...\n"); if (NULL != str) { cg_string_clear(str); if (value != NULL) { str->valueSize = len; str->memSize = str->valueSize + 1; str->value = (char *)malloc(str->memSize * sizeof(char)); if ( NULL == str->value ) { cg_log_debug_s("Memory allocation failure!\n"); return; } /* memcpy works better with non-zero-terminated data than strncpy */ memcpy(str->value, value, len); str->value[len] = '\0'; } } cg_log_debug_l5("Leaving...\n"); }