pointerless buffers. Also convenient for unicode.c.
/*
* This file is part of DisOrder.
- * Copyright (C) 2004, 2005, 2006, 2007 Richard Kettlewell
+ * Copyright (C) 2004, 2005, 2006, 2007, 2009 Richard Kettlewell
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
return ptr;
}
+/** @brief Allocate memory
+ * @param count Number of objects to allocate
+ * @param size Size of one object
+ * @return Pointer to allocated memory
+ *
+ * Terminates the process on error. IMPORTANT: the allocated memory is NOT
+ * 0-filled (unlike @c calloc()).
+ */
+void *xcalloc_noptr(size_t count, size_t size) {
+ if(count > SIZE_MAX / size)
+ fatal(0, "excessively large calloc");
+ return xmalloc_noptr(count * size);
+}
+
/** @brief Reallocate memory
* @param ptr Block to reallocated
* @param n Bytes to allocate
Local Variables:
c-basic-offset:2
comment-column:40
+fill-column:79
+indent-tabs-mode:nil
End:
*/
/*
* This file is part of DisOrder.
- * Copyright (C) 2004-2008 Richard Kettlewell
+ * Copyright (C) 2004-2009 Richard Kettlewell
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
void *xmalloc_noptr(size_t);
void *xrealloc_noptr(void *, size_t);
+void *xcalloc_noptr(size_t count, size_t size);
char *xstrdup(const char *);
char *xstrndup(const char *, size_t);
/* As malloc/realloc/strdup, but
uaudio_thread_max = max;
uaudio_thread_started = 1;
for(int n = 0; n < UAUDIO_THREAD_BUFFERS; ++n)
- uaudio_buffers[n].samples = xcalloc(uaudio_thread_max, uaudio_sample_size);
+ uaudio_buffers[n].samples = xcalloc_noptr(uaudio_thread_max,
+ uaudio_sample_size);
uaudio_collect_buffer = uaudio_play_buffer = 0;
if((e = pthread_create(&uaudio_collect_thread,
NULL,
/*
* This file is part of DisOrder
- * Copyright (C) 2007 Richard Kettlewell
+ * Copyright (C) 2007, 2009 Richard Kettlewell
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
}
/* If it's a word add it to the list of results */
if(isword) {
- w = xcalloc(b2 - b1 + 1, sizeof(uint32_t));
- memcpy(w, it->s + b1, (b2 - b1) * sizeof (uint32_t));
+ const size_t len = b2 - b1;
+ w = xcalloc_noptr(len + 1, sizeof(uint32_t));
+ memcpy(w, it->s + b1, len * sizeof (uint32_t));
+ w[len] = 0;
vector32_append(v32, w);
}
}