nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include "fake_glib.h" nuclear@0: nuclear@0: FakeGPtrArray *fg_ptr_array_new(void) nuclear@0: { nuclear@0: FakeGPtrArray *arr; nuclear@0: nuclear@0: if(!(arr = malloc(sizeof *arr))) { nuclear@0: return 0; nuclear@0: } nuclear@0: arr->pdata = 0; nuclear@0: arr->len = 0; nuclear@0: return arr; nuclear@0: } nuclear@0: nuclear@0: void **fg_ptr_array_free(FakeGPtrArray *arr, int free_seg) nuclear@0: { nuclear@0: void **res; nuclear@0: nuclear@0: if(!arr) { nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: if(free_seg) { nuclear@0: free(arr->pdata); nuclear@0: res = 0; nuclear@0: } else { nuclear@0: res = arr->pdata; nuclear@0: } nuclear@0: free(arr); nuclear@0: return res; nuclear@0: } nuclear@0: nuclear@0: void fg_ptr_array_add(FakeGPtrArray *arr, void *data) nuclear@0: { nuclear@0: int idx = arr->len++; nuclear@0: nuclear@0: arr->pdata = realloc(arr->pdata, arr->len * sizeof *arr->pdata); nuclear@0: assert(arr->pdata); nuclear@0: nuclear@0: arr->pdata[idx] = data; nuclear@0: } nuclear@0: nuclear@0: int fg_ptr_array_remove(FakeGPtrArray *arr, void *data) nuclear@0: { nuclear@0: int i; nuclear@0: nuclear@0: for(i=0; ilen; i++) { nuclear@0: if(arr->pdata[i] == data) { nuclear@0: fg_ptr_array_remove_index(arr, i); nuclear@0: return 1; nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: void *fg_ptr_array_remove_index(FakeGPtrArray *arr, unsigned int idx) nuclear@0: { nuclear@0: void *data = arr->pdata[idx]; nuclear@0: int rest = --arr->len - idx; nuclear@0: if(rest > 0) { nuclear@0: memmove(arr->pdata + idx, arr->pdata + idx + 1, rest * sizeof *arr->pdata); nuclear@0: } nuclear@0: return data; nuclear@0: } nuclear@0: nuclear@0: void fg_ptr_array_sort(FakeGPtrArray *arr, FakeGCompareFunc cmp) nuclear@0: { nuclear@0: qsort(arr->pdata, arr->len, sizeof *arr->pdata, cmp); nuclear@0: } nuclear@0: nuclear@0: /* -- logging -- */ nuclear@0: nuclear@0: void fg_warning(const char *fmt, ...) nuclear@0: { nuclear@0: va_list ap; nuclear@0: nuclear@0: printf("warning: "); nuclear@0: nuclear@0: va_start(ap, fmt); nuclear@0: vprintf(fmt, ap); nuclear@0: va_end(ap); nuclear@0: } nuclear@0: nuclear@0: void fg_critical(const char *fmt, ...) nuclear@0: { nuclear@0: va_list ap; nuclear@0: nuclear@0: printf("critical: "); nuclear@0: nuclear@0: va_start(ap, fmt); nuclear@0: vfprintf(stderr, fmt, ap); nuclear@0: va_end(ap); nuclear@0: nuclear@0: if(getenv("G_DEBUG")) { nuclear@0: abort(); nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: void fg_error(const char *fmt, ...) nuclear@0: { nuclear@0: va_list ap; nuclear@0: nuclear@0: printf("error: "); nuclear@0: nuclear@0: va_start(ap, fmt); nuclear@0: vfprintf(stderr, fmt, ap); nuclear@0: va_end(ap); nuclear@0: abort(); nuclear@0: } nuclear@0: nuclear@0: void fg_debug(const char *fmt, ...) nuclear@0: { nuclear@0: va_list ap; nuclear@0: nuclear@0: printf("debug: "); nuclear@0: nuclear@0: va_start(ap, fmt); nuclear@0: vprintf(fmt, ap); nuclear@0: va_end(ap); nuclear@0: }