smflite

diff 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
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/src/fake_glib.c	Thu Jan 26 11:25:11 2012 +0200
     1.3 @@ -0,0 +1,126 @@
     1.4 +#include <stdio.h>
     1.5 +#include <stdlib.h>
     1.6 +#include <string.h>
     1.7 +#include <stdarg.h>
     1.8 +#include <assert.h>
     1.9 +#include "fake_glib.h"
    1.10 +
    1.11 +FakeGPtrArray *fg_ptr_array_new(void)
    1.12 +{
    1.13 +	FakeGPtrArray *arr;
    1.14 +
    1.15 +	if(!(arr = malloc(sizeof *arr))) {
    1.16 +		return 0;
    1.17 +	}
    1.18 +	arr->pdata = 0;
    1.19 +	arr->len = 0;
    1.20 +	return arr;
    1.21 +}
    1.22 +
    1.23 +void **fg_ptr_array_free(FakeGPtrArray *arr, int free_seg)
    1.24 +{
    1.25 +	void **res;
    1.26 +
    1.27 +	if(!arr) {
    1.28 +		return 0;
    1.29 +	}
    1.30 +
    1.31 +	if(free_seg) {
    1.32 +		free(arr->pdata);
    1.33 +		res = 0;
    1.34 +	} else {
    1.35 +		res = arr->pdata;
    1.36 +	}
    1.37 +	free(arr);
    1.38 +	return res;
    1.39 +}
    1.40 +
    1.41 +void fg_ptr_array_add(FakeGPtrArray *arr, void *data)
    1.42 +{
    1.43 +	int idx = arr->len++;
    1.44 +
    1.45 +	arr->pdata = realloc(arr->pdata, arr->len * sizeof *arr->pdata);
    1.46 +	assert(arr->pdata);
    1.47 +
    1.48 +	arr->pdata[idx] = data;
    1.49 +}
    1.50 +
    1.51 +int fg_ptr_array_remove(FakeGPtrArray *arr, void *data)
    1.52 +{
    1.53 +	int i;
    1.54 +
    1.55 +	for(i=0; i<arr->len; i++) {
    1.56 +		if(arr->pdata[i] == data) {
    1.57 +			fg_ptr_array_remove_index(arr, i);
    1.58 +			return 1;
    1.59 +		}
    1.60 +	}
    1.61 +
    1.62 +	return 0;
    1.63 +}
    1.64 +
    1.65 +void *fg_ptr_array_remove_index(FakeGPtrArray *arr, unsigned int idx)
    1.66 +{
    1.67 +	void *data = arr->pdata[idx];
    1.68 +	int rest = --arr->len - idx;
    1.69 +	if(rest > 0) {
    1.70 +		memmove(arr->pdata + idx, arr->pdata + idx + 1, rest * sizeof *arr->pdata);
    1.71 +	}
    1.72 +	return data;
    1.73 +}
    1.74 +
    1.75 +void fg_ptr_array_sort(FakeGPtrArray *arr, FakeGCompareFunc cmp)
    1.76 +{
    1.77 +	qsort(arr->pdata, arr->len, sizeof *arr->pdata, cmp);
    1.78 +}
    1.79 +
    1.80 +/* -- logging -- */
    1.81 +
    1.82 +void fg_warning(const char *fmt, ...)
    1.83 +{
    1.84 +	va_list ap;
    1.85 +
    1.86 +	printf("warning: ");
    1.87 +
    1.88 +	va_start(ap, fmt);
    1.89 +	vprintf(fmt, ap);
    1.90 +	va_end(ap);
    1.91 +}
    1.92 +
    1.93 +void fg_critical(const char *fmt, ...)
    1.94 +{
    1.95 +	va_list ap;
    1.96 +
    1.97 +	printf("critical: ");
    1.98 +
    1.99 +	va_start(ap, fmt);
   1.100 +	vfprintf(stderr, fmt, ap);
   1.101 +	va_end(ap);
   1.102 +
   1.103 +	if(getenv("G_DEBUG")) {
   1.104 +		abort();
   1.105 +	}
   1.106 +}
   1.107 +
   1.108 +void fg_error(const char *fmt, ...)
   1.109 +{
   1.110 +	va_list ap;
   1.111 +
   1.112 +	printf("error: ");
   1.113 +
   1.114 +	va_start(ap, fmt);
   1.115 +	vfprintf(stderr, fmt, ap);
   1.116 +	va_end(ap);
   1.117 +	abort();
   1.118 +}
   1.119 +
   1.120 +void fg_debug(const char *fmt, ...)
   1.121 +{
   1.122 +	va_list ap;
   1.123 +
   1.124 +	printf("debug: ");
   1.125 +
   1.126 +	va_start(ap, fmt);
   1.127 +	vprintf(fmt, ap);
   1.128 +	va_end(ap);
   1.129 +}