patch: added str_error()

This commit is contained in:
Alfred E. Heggestad 2012-08-07 12:58:51 +00:00
parent 0535275300
commit 5d71d9455e
4 changed files with 45 additions and 7 deletions

View file

@ -107,6 +107,8 @@ void str_ncpy(char *dst, const char *src, size_t n);
int str_dup(char **dst, const char *src);
int str_casecmp(const char *s1, const char *s2);
size_t str_len(const char *s);
const char *str_error(int errnum, char *buf, size_t sz);
/**
* Check if string is set

View file

@ -11,4 +11,5 @@ SRCS += fmt/print.c
SRCS += fmt/prm.c
SRCS += fmt/regex.c
SRCS += fmt/str.c
SRCS += fmt/str_error.c
SRCS += fmt/time.c

View file

@ -3,8 +3,6 @@
*
* Copyright (C) 2010 Creytiv.com
*/
#define _GNU_SOURCE 1
#define __EXTENSIONS__ 1
#include <string.h>
#include <re_types.h>
#include <re_sa.h>
@ -315,11 +313,9 @@ int re_vhprintf(const char *fmt, va_list ap, re_vprintf_h *vph, void *arg)
break;
case 'm':
(void)strerror_r(va_arg(ap, int), addr, sizeof(addr));
addr[sizeof(addr)-1] = '\0';
err |= write_padded(addr, strlen(addr), pad, ' ',
plr, NULL, vph, arg);
str = str_error(va_arg(ap, int), addr, sizeof(addr));
err |= write_padded(str, str_len(str), pad,
' ', plr, NULL, vph, arg);
break;
case 'p':

39
src/fmt/str_error.c Normal file
View file

@ -0,0 +1,39 @@
/**
* @file str_error.c System error messages
*
* Copyright (C) 2010 Creytiv.com
*/
#define _GNU_SOURCE 1
#define __EXTENSIONS__ 1
#include <string.h>
#include <re_types.h>
#include <re_fmt.h>
/**
* Look up an error message string corresponding to an error number.
*
* @param errnum Error Code
* @param buf Buffer for storing error message
* @param sz Buffer size
*
* @return Error message string
*/
const char *str_error(int errnum, char *buf, size_t sz)
{
const char *s;
if (!buf || !sz)
return NULL;
buf[0] = '\0';
#ifdef LINUX
s = strerror_r(errnum, buf, sz);
#else
(void)strerror_r(errnum, buf, sz);
s = buf;
#endif
buf[sz - 1] = '\0';
return s;
}