smflite
annotate src/fake_glib.c @ 0:4264abea8b06
smf-lite initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Thu, 26 Jan 2012 11:25:11 +0200 |
parents | |
children | 8e535ca4bb86 |
rev | line source |
---|---|
nuclear@0 | 1 #include <stdio.h> |
nuclear@0 | 2 #include <stdlib.h> |
nuclear@0 | 3 #include <string.h> |
nuclear@0 | 4 #include <stdarg.h> |
nuclear@0 | 5 #include <assert.h> |
nuclear@0 | 6 #include "fake_glib.h" |
nuclear@0 | 7 |
nuclear@0 | 8 FakeGPtrArray *fg_ptr_array_new(void) |
nuclear@0 | 9 { |
nuclear@0 | 10 FakeGPtrArray *arr; |
nuclear@0 | 11 |
nuclear@0 | 12 if(!(arr = malloc(sizeof *arr))) { |
nuclear@0 | 13 return 0; |
nuclear@0 | 14 } |
nuclear@0 | 15 arr->pdata = 0; |
nuclear@0 | 16 arr->len = 0; |
nuclear@0 | 17 return arr; |
nuclear@0 | 18 } |
nuclear@0 | 19 |
nuclear@0 | 20 void **fg_ptr_array_free(FakeGPtrArray *arr, int free_seg) |
nuclear@0 | 21 { |
nuclear@0 | 22 void **res; |
nuclear@0 | 23 |
nuclear@0 | 24 if(!arr) { |
nuclear@0 | 25 return 0; |
nuclear@0 | 26 } |
nuclear@0 | 27 |
nuclear@0 | 28 if(free_seg) { |
nuclear@0 | 29 free(arr->pdata); |
nuclear@0 | 30 res = 0; |
nuclear@0 | 31 } else { |
nuclear@0 | 32 res = arr->pdata; |
nuclear@0 | 33 } |
nuclear@0 | 34 free(arr); |
nuclear@0 | 35 return res; |
nuclear@0 | 36 } |
nuclear@0 | 37 |
nuclear@0 | 38 void fg_ptr_array_add(FakeGPtrArray *arr, void *data) |
nuclear@0 | 39 { |
nuclear@0 | 40 int idx = arr->len++; |
nuclear@0 | 41 |
nuclear@0 | 42 arr->pdata = realloc(arr->pdata, arr->len * sizeof *arr->pdata); |
nuclear@0 | 43 assert(arr->pdata); |
nuclear@0 | 44 |
nuclear@0 | 45 arr->pdata[idx] = data; |
nuclear@0 | 46 } |
nuclear@0 | 47 |
nuclear@0 | 48 int fg_ptr_array_remove(FakeGPtrArray *arr, void *data) |
nuclear@0 | 49 { |
nuclear@0 | 50 int i; |
nuclear@0 | 51 |
nuclear@0 | 52 for(i=0; i<arr->len; i++) { |
nuclear@0 | 53 if(arr->pdata[i] == data) { |
nuclear@0 | 54 fg_ptr_array_remove_index(arr, i); |
nuclear@0 | 55 return 1; |
nuclear@0 | 56 } |
nuclear@0 | 57 } |
nuclear@0 | 58 |
nuclear@0 | 59 return 0; |
nuclear@0 | 60 } |
nuclear@0 | 61 |
nuclear@0 | 62 void *fg_ptr_array_remove_index(FakeGPtrArray *arr, unsigned int idx) |
nuclear@0 | 63 { |
nuclear@0 | 64 void *data = arr->pdata[idx]; |
nuclear@0 | 65 int rest = --arr->len - idx; |
nuclear@0 | 66 if(rest > 0) { |
nuclear@0 | 67 memmove(arr->pdata + idx, arr->pdata + idx + 1, rest * sizeof *arr->pdata); |
nuclear@0 | 68 } |
nuclear@0 | 69 return data; |
nuclear@0 | 70 } |
nuclear@0 | 71 |
nuclear@0 | 72 void fg_ptr_array_sort(FakeGPtrArray *arr, FakeGCompareFunc cmp) |
nuclear@0 | 73 { |
nuclear@0 | 74 qsort(arr->pdata, arr->len, sizeof *arr->pdata, cmp); |
nuclear@0 | 75 } |
nuclear@0 | 76 |
nuclear@0 | 77 /* -- logging -- */ |
nuclear@0 | 78 |
nuclear@0 | 79 void fg_warning(const char *fmt, ...) |
nuclear@0 | 80 { |
nuclear@0 | 81 va_list ap; |
nuclear@0 | 82 |
nuclear@0 | 83 printf("warning: "); |
nuclear@0 | 84 |
nuclear@0 | 85 va_start(ap, fmt); |
nuclear@0 | 86 vprintf(fmt, ap); |
nuclear@0 | 87 va_end(ap); |
nuclear@0 | 88 } |
nuclear@0 | 89 |
nuclear@0 | 90 void fg_critical(const char *fmt, ...) |
nuclear@0 | 91 { |
nuclear@0 | 92 va_list ap; |
nuclear@0 | 93 |
nuclear@0 | 94 printf("critical: "); |
nuclear@0 | 95 |
nuclear@0 | 96 va_start(ap, fmt); |
nuclear@0 | 97 vfprintf(stderr, fmt, ap); |
nuclear@0 | 98 va_end(ap); |
nuclear@0 | 99 |
nuclear@0 | 100 if(getenv("G_DEBUG")) { |
nuclear@0 | 101 abort(); |
nuclear@0 | 102 } |
nuclear@0 | 103 } |
nuclear@0 | 104 |
nuclear@0 | 105 void fg_error(const char *fmt, ...) |
nuclear@0 | 106 { |
nuclear@0 | 107 va_list ap; |
nuclear@0 | 108 |
nuclear@0 | 109 printf("error: "); |
nuclear@0 | 110 |
nuclear@0 | 111 va_start(ap, fmt); |
nuclear@0 | 112 vfprintf(stderr, fmt, ap); |
nuclear@0 | 113 va_end(ap); |
nuclear@0 | 114 abort(); |
nuclear@0 | 115 } |
nuclear@0 | 116 |
nuclear@0 | 117 void fg_debug(const char *fmt, ...) |
nuclear@0 | 118 { |
nuclear@0 | 119 va_list ap; |
nuclear@0 | 120 |
nuclear@0 | 121 printf("debug: "); |
nuclear@0 | 122 |
nuclear@0 | 123 va_start(ap, fmt); |
nuclear@0 | 124 vprintf(fmt, ap); |
nuclear@0 | 125 va_end(ap); |
nuclear@0 | 126 } |