multiple update

This commit is contained in:
vemax78
2013-05-03 22:28:06 +02:00
parent f2dda6e115
commit 9082a7855c
10 changed files with 635 additions and 233 deletions

View File

@ -70,22 +70,28 @@ void capwap_array_resize(struct capwap_array* array, unsigned long count) {
if (array->count == count) {
return;
}
if (count > 0) {
newbuffer = capwap_alloc(array->itemsize * count);
if (!newbuffer) {
capwap_outofmemory();
}
}
if (array->buffer) {
if (newbuffer != NULL) {
memcpy(newbuffer, array->buffer, array->itemsize * min(array->count, count));
int newcount = min(array->count, count);
memcpy(newbuffer, array->buffer, array->itemsize * newcount);
/* Zeroed new items */
if (array->zeroed && (count > newcount)) {
memset(newbuffer + array->itemsize * newcount, 0, array->itemsize * (count - newcount));
}
}
capwap_free(array->buffer);
}
array->buffer = newbuffer;
array->count = count;
}

View File

@ -5,6 +5,7 @@ struct capwap_array {
void* buffer;
unsigned short itemsize;
unsigned long count;
int zeroed;
};
struct capwap_array* capwap_array_create(unsigned short itemsize, unsigned long initcount);
@ -13,9 +14,4 @@ void capwap_array_free(struct capwap_array* array);
void* capwap_array_get_item_pointer(struct capwap_array* array, unsigned long pos);
void capwap_array_resize(struct capwap_array* array, unsigned long count);
/* Helper */
#define capwap_array_getitem(x, y, z) *((z*)capwap_array_get_item_pointer((x), (y)))
#define capwap_array_setnewitem(x, y, z) *((z*)capwap_array_get_item_pointer((x), (x)->count)) = (y)
#endif /* __CAPWAP_ARRAY_HEADER__ */

View File

@ -32,6 +32,11 @@ void capwap_logging_printf(int level, const char *format, ...);
#define capwap_logging_error(f, args...) capwap_logging_printf(CAPWAP_LOGGING_ERROR, f, ##args)
#define capwap_logging_warning(f, args...) capwap_logging_printf(CAPWAP_LOGGING_WARNING, f, ##args)
#define capwap_logging_info(f, args...) capwap_logging_printf(CAPWAP_LOGGING_INFO, f, ##args)
#ifdef DISABLE_LOGGING_DEBUG
#define capwap_logging_debug(f, args...)
#else
#define capwap_logging_debug(f, args...) capwap_logging_printf(CAPWAP_LOGGING_DEBUG, f, ##args)
#endif
#endif /* __CAPWAP_LOGGING_HEADER__ */