X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=string.c;h=46b346235f17ffb696f43d22d3dcfde4c75ba4ca;hb=81bc7110ff6a4c2d002618b94fcf5aa60cd4cad2;hp=f01c83929850d7873516f38dbed6864c458406de;hpb=27c08870ba172782f6406045007b6ff32a4f7329;p=paraslash.git diff --git a/string.c b/string.c index f01c8392..46b34623 100644 --- a/string.c +++ b/string.c @@ -62,6 +62,43 @@ __must_check __malloc void *arr_alloc(size_t nmemb, size_t size) return arr_realloc(NULL, nmemb, size); } +/** + * Allocate and initialize an array, abort on failure or bugs. + * + * \param nmemb See \ref arr_realloc(). + * \param size See \ref arr_realloc(). + * + * This calls \ref arr_alloc() and zeroes-out the array. + * + * \return See \ref arr_alloc(). + */ +__must_check __malloc void *arr_zalloc(size_t nmemb, size_t size) +{ + void *ptr = arr_alloc(nmemb, size); + + /* + * This multiplication can not overflow because the above call to \ref + * arr_alloc() aborts on overflow. + */ + memset(ptr, 0, nmemb * size); + return ptr; +} + +/** + * Allocate and initialize memory. + * + * \param size The desired new size. + * + * \return A pointer to the allocated and zeroed-out memory, which is suitably + * aligned for any kind of variable. + * + * \sa \ref alloc(), calloc(3). + */ +__must_check void *zalloc(size_t size) +{ + return arr_zalloc(1, size); +} + /** * Paraslash's version of realloc(). * @@ -98,24 +135,6 @@ __must_check __malloc void *alloc(size_t size) return arr_alloc(1, size); } -/** - * Allocate and initialize memory. - * - * \param size The desired new size. - * - * \return A pointer to the allocated and zeroed-out memory, which is suitably - * aligned for any kind of variable. - * - * \sa \ref alloc(), calloc(3). - */ -__must_check __malloc void *zalloc(size_t size) -{ - void *ret = alloc(size); - - memset(ret, 0, size); - return ret; -} - /** * Paraslash's version of strdup(). * @@ -580,37 +599,6 @@ int para_atoi32(const char *str, int32_t *value) return 1; } -static inline int loglevel_equal(const char *arg, const char * const ll) -{ - return !strncasecmp(arg, ll, strlen(ll)); -} - -/** - * Compute the loglevel number from its name. - * - * \param txt The name of the loglevel (debug, info, ...). - * - * \return The numeric representation of the loglevel name. - */ -int get_loglevel_by_name(const char *txt) -{ - if (loglevel_equal(txt, "debug")) - return LL_DEBUG; - if (loglevel_equal(txt, "info")) - return LL_INFO; - if (loglevel_equal(txt, "notice")) - return LL_NOTICE; - if (loglevel_equal(txt, "warning")) - return LL_WARNING; - if (loglevel_equal(txt, "error")) - return LL_ERROR; - if (loglevel_equal(txt, "crit")) - return LL_CRIT; - if (loglevel_equal(txt, "emerg")) - return LL_EMERG; - return -E_BAD_LL; -} - static int get_next_word(const char *buf, const char *delim, char **word) { enum line_state_flags {LSF_HAVE_WORD = 1, LSF_BACKSLASH = 2, @@ -818,27 +806,6 @@ int create_shifted_argv(const char *buf, const char *delim, char ***result) return create_argv_offset(1, buf, delim, result); } -/** - * Find out if the given string is contained in the arg vector. - * - * \param arg The string to look for. - * \param argv The array to search. - * - * \return The first index whose value equals \a arg, or \p -E_ARG_NOT_FOUND if - * arg was not found in \a argv. - */ -int find_arg(const char *arg, char **argv) -{ - int i; - - if (!argv) - return -E_ARG_NOT_FOUND; - for (i = 0; argv[i]; i++) - if (strcmp(arg, argv[i]) == 0) - return i; - return -E_ARG_NOT_FOUND; -} - /** * Compile a regular expression. *