void free_entry__(void* p) { char verify[16]; aim_snprintf(verify, sizeof(verify), "%d", free_count__); if(strcmp(verify, p)) { AIM_LOG_ERROR("free_entry__: expected %s, got %s", verify, p); } AIM_FREE(p); free_count__++; }
char* ucli_util_data_to_string(ucli_context_t* uc, uint8_t* data, int size, int columns) { int c; int i; /** * We will need at least 3*size for all bytes. * Each column requires 8 extra characters, including newline. * */ int len = (size*3) + (columns*8) + 1; char* s = aim_zmalloc(len+1); char* sp = s; AIM_REFERENCE(uc); for(i = 0; i < size; i++) { if(i % columns == 0) { if(i != 0) { c = aim_snprintf(sp, len, "\n"); sp += c, len -= c; } if(size > columns) { c = aim_snprintf(sp, len, " %.4x: ", i); sp += c, len -= c; } } c = aim_snprintf(sp, len, "%.2x ", data[i]); sp += c, len -= c; } if((size > columns) && (size % columns != 0)) { c = aim_snprintf(sp, len, "\n"); sp += c, len -= c; } return s; }
/* Just make sure elements get free properly */ void bigring_str_test(int size, bigring_free_entry_f fef) { bigring_t* br = bigring_create(size, fef); int i; char* p; char buf[16]; free_count__ = 0; for(i = 0; i < size*2; i++) { bigring_push(br, aim_fstrdup("%d", i)); } /* * At this point: * free_count should be size (or zero if using default free function) * next entry should be "size" * ringcount should be size */ if(fef == free_entry__) { if(free_count__ != size) { AIM_LOG_ERROR("Free count is %d, should be %d", free_count__, size); } } if(fef == bigring_aim_free_entry) { if(free_count__ != 0) { AIM_LOG_ERROR("free_count is %d, should be zero", free_count__); } } ASSERT_COUNT(bigring_count(br), size, bigring_size(br)); p = bigring_shift(br); ASSERT_COUNT(bigring_count(br), size-1, bigring_size(br)); aim_snprintf(buf, sizeof(buf), "%d", size); if(strcmp(p, buf)) { AIM_LOG_ERROR("Next is '%s', should be '%s'", p, buf); abort(); } AIM_FREE(p); /* * Verify the rest of the entries are free. * Note - we removed the current entry, so we need * to increment free_count__ to account for it or * the verification will be off by one. */ free_count__++; bigring_destroy(br); }