void *file_load(char const *file_name, size_t *len_) { assert(file_name); SLOG(LOG_DEBUG, "Loading content of file '%s'", file_name); ssize_t len = file_size(file_name); if (len < 0) return NULL; if (len_) *len_ = len; if (len == 0) return NULL; MALLOCER(file_content); char *buf = MALLOC(file_content, len+1); if (! buf) { SLOG(LOG_ERR, "Cannot alloc for reading %zu bytes", len); return NULL; } int fd = file_open(file_name, O_RDONLY); if (fd < 0) goto err1; if (len != file_read(fd, buf, len)) goto err1; buf[len] = '\0'; file_close(fd); return buf; err1: FREE(buf); return NULL; }
static struct parser *sdp_parser_new(struct proto *proto, struct timeval const *now) { MALLOCER(sdp_parsers); struct sdp_parser *sdp_parser = MALLOC(sdp_parsers, sizeof *sdp_parser); if (-1 == sdp_parser_ctor(sdp_parser, proto, now)) { FREE(sdp_parser); return NULL; } return &sdp_parser->parser; }
static void malloc_check(void) { MALLOCER(test1); assert_empty(&mallocer_test1); // Can malloc and deref char *ptr = MALLOC(test1, 1); assert(ptr); ptr[1] = 'a'; assert(mallocer_test1.tot_size == 1); assert(mallocer_test1.nb_blocks == 1); FREE(ptr); assert_empty(&mallocer_test1); // Can malloc(0) then free it ptr = MALLOC(test1, 0); FREE(ptr); assert_empty(&mallocer_test1); }
static void realloc_check(void) { MALLOCER(test2); // Can resize down char *ptr = MALLOC(test2, 2); assert(ptr); ptr = REALLOC(test2, ptr, 1); assert(ptr); FREE(ptr); assert_empty(&mallocer_test2); // Resize to 0 means free ptr = MALLOC(test2, 1); REALLOC(test2, ptr, 0); assert_empty(&mallocer_test2); // Realloc of NULL means alloc ptr = REALLOC(test2, NULL, 1); assert(ptr); assert(mallocer_test2.tot_size == 1); FREE(ptr); assert_empty(&mallocer_test2); }