X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=string.c;h=f51f3574f0cf372bdd8febb5ac517c45e3d92d59;hp=3c80d27cc6b6ad73a95392c17cdb041837ec6ba5;hb=343a65bc48b4e0cda4d9a14afcd7e96cca9c5de9;hpb=00e4d4da1b2c00da139b09d3ed4ab9ad9fba2691 diff --git a/string.c b/string.c index 3c80d27c..f51f3574 100644 --- a/string.c +++ b/string.c @@ -33,7 +33,7 @@ __must_check __malloc void *para_realloc(void *p, size_t size) { /* - * No need to check for NULL pointers: If p is NULL, the call + * No need to check for NULL pointers: If p is NULL, the call * to realloc is equivalent to malloc(size) */ assert(size); @@ -64,7 +64,7 @@ __must_check __malloc void *para_malloc(size_t size) assert(size); p = malloc(size); if (!p) { - PARA_EMERG_LOG("malloc failed (size = %zu), aborting\n", + PARA_EMERG_LOG("malloc failed (size = %zu), aborting\n", size); exit(EXIT_FAILURE); } @@ -99,7 +99,7 @@ __must_check __malloc void *para_calloc(size_t size) * A wrapper for strdup(3). It calls \p exit(EXIT_FAILURE) on errors, i.e. * there is no need to check the return value in the caller. * - * \return A pointer to the duplicated string. If \p s was the NULL pointer, + * \return A pointer to the duplicated string. If \a s was the \p NULL pointer, * an pointer to an empty string is returned. * * \sa strdup(3) @@ -218,12 +218,13 @@ __must_check const char *para_basename(const char *name) * * \param buf The string to be chopped. * - * Replace the last character in \p buf by zero if it is euqal to + * Replace the last character in \p buf by zero if it is equal to * the newline character. */ void chop(char *buf) { int n = strlen(buf); + if (!n) return; if (buf[n - 1] == '\n') @@ -234,7 +235,7 @@ void chop(char *buf) * Get a random filename. * * This is by no means a secure way to create temporary files in a hostile - * direcory like \p /tmp. However, it is OK to use for temp files, fifos, + * directory like \p /tmp. However, it is OK to use for temp files, fifos, * sockets that are created in ~/.paraslash. Result must be freed by the * caller. * @@ -254,8 +255,8 @@ __must_check __malloc char *para_tmpname(void) /** * Get the logname of the current user. * - * \return A dynammically allocated string that must be freed by the caller. On - * errors, the string "unknown user" is returned, i.e. this function never + * \return A dynamically allocated string that must be freed by the caller. On + * errors, the string "unknown_user" is returned, i.e. this function never * returns \p NULL. * * \sa getpwuid(3). @@ -269,7 +270,7 @@ __must_check __malloc char *para_logname(void) /** * Get the home directory of the current user. * - * \return A dynammically allocated string that must be freed by the caller. If + * \return A dynamically allocated string that must be freed by the caller. If * the home directory could not be found, this function returns "/tmp". */ __must_check __malloc char *para_homedir(void) @@ -285,16 +286,16 @@ __must_check __malloc char *para_homedir(void) * \param argv_ptr Pointer to the list of substrings. * \param delim Delimiter. * - * This function modifies \a args by replacing each occurance of \a delim by + * This function modifies \a args by replacing each occurrence of \a delim by * zero. A \p NULL-terminated array of pointers to char* is allocated dynamically * and these pointers are initialized to point to the broken-up substrings * within \a args. A pointer to this array is returned via \a argv_ptr. * * \return The number of substrings found in \a args. */ -__must_check unsigned split_args(char *args, char *** const argv_ptr, const char *delim) +unsigned split_args(char *args, char *** const argv_ptr, const char *delim) { - char *p = args; + char *p; char **argv; size_t n = 0, i, j; @@ -331,7 +332,7 @@ __must_check unsigned split_args(char *args, char *** const argv_ptr, const char /** * Get the own hostname. * - * \return A dynammically allocated string containing the hostname. + * \return A dynamically allocated string containing the hostname. * * \sa uname(2). */ @@ -408,7 +409,7 @@ static int for_each_complete_line(enum for_each_line_modes mode, char *buf, /** * Call a custom function for each complete line. * - * \param buf The buffer containing data seperated by newlines. + * \param buf The buffer containing data separated by newlines. * \param size The number of bytes in \a buf. * \param line_handler The custom function. * \param private_data Pointer passed to \a line_handler. @@ -457,7 +458,7 @@ int for_each_line_ro(char *buf, size_t size, line_handler_t *line_handler, } /** - * Safely print into a buffer at a given offset + * Safely print into a buffer at a given offset. * * \param b Determines the buffer, its size, and the offset. * \param fmt The format string. @@ -465,7 +466,7 @@ int for_each_line_ro(char *buf, size_t size, line_handler_t *line_handler, * This function prints into the buffer given by \a b at the offset which is * also given by \a b. If there is not enough space to hold the result, the * buffer size is doubled until the underlying call to vsnprintf() succeeds - * or the size of the buffer exceeds the maximal size specified in \a pb. + * or the size of the buffer exceeds the maximal size specified in \a b. * * In the latter case the unmodified \a buf and \a offset values as well as the * private_data pointer of \a b are passed to the \a max_size_handler of \a b. @@ -481,7 +482,7 @@ int for_each_line_ro(char *buf, size_t size, line_handler_t *line_handler, * initial buffer is allocated. * * \return The number of bytes printed into the buffer (not including the - * therminating \p NULL byte). + * terminating \p NULL byte). * * \sa make_message(), vsnprintf(3). */ @@ -587,21 +588,33 @@ 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 (!strcasecmp(txt, "debug")) + if (loglevel_equal(txt, "debug")) return LL_DEBUG; - if (!strcasecmp(txt, "info")) + if (loglevel_equal(txt, "info")) return LL_INFO; - if (!strcasecmp(txt, "notice")) + if (loglevel_equal(txt, "notice")) return LL_NOTICE; - if (!strcasecmp(txt, "warning")) + if (loglevel_equal(txt, "warning")) return LL_WARNING; - if (!strcasecmp(txt, "error")) + if (loglevel_equal(txt, "error")) return LL_ERROR; - if (!strcasecmp(txt, "crit")) + if (loglevel_equal(txt, "crit")) return LL_CRIT; - if (!strcasecmp(txt, "emerg")) + if (loglevel_equal(txt, "emerg")) return LL_EMERG; return -1; }