| /* |
| * Taken from perf which in turn take it from GIT |
| */ |
| |
| #include "kvm/util.h" |
| |
| static void report(const char *prefix, const char *err, va_list params) |
| { |
| char msg[1024]; |
| vsnprintf(msg, sizeof(msg), err, params); |
| fprintf(stderr, " %s%s\n", prefix, msg); |
| } |
| |
| static NORETURN void die_builtin(const char *err, va_list params) |
| { |
| report(" Fatal: ", err, params); |
| exit(128); |
| } |
| |
| static void error_builtin(const char *err, va_list params) |
| { |
| report(" Error: ", err, params); |
| } |
| |
| static void warn_builtin(const char *warn, va_list params) |
| { |
| report(" Warning: ", warn, params); |
| } |
| |
| static void info_builtin(const char *info, va_list params) |
| { |
| report(" Info: ", info, params); |
| } |
| |
| void die(const char *err, ...) |
| { |
| va_list params; |
| |
| va_start(params, err); |
| die_builtin(err, params); |
| va_end(params); |
| } |
| |
| int error(const char *err, ...) |
| { |
| va_list params; |
| |
| va_start(params, err); |
| error_builtin(err, params); |
| va_end(params); |
| return -1; |
| } |
| |
| void warning(const char *warn, ...) |
| { |
| va_list params; |
| |
| va_start(params, warn); |
| warn_builtin(warn, params); |
| va_end(params); |
| } |
| |
| void info(const char *info, ...) |
| { |
| va_list params; |
| |
| va_start(params, info); |
| info_builtin(info, params); |
| va_end(params); |
| } |
| |
| void die_perror(const char *s) |
| { |
| perror(s); |
| exit(1); |
| } |
| |
| /** |
| * strlcat - Append a length-limited, %NUL-terminated string to another |
| * @dest: The string to be appended to |
| * @src: The string to append to it |
| * @count: The size of the destination buffer. |
| */ |
| size_t strlcat(char *dest, const char *src, size_t count) |
| { |
| size_t dsize = strlen(dest); |
| size_t len = strlen(src); |
| size_t res = dsize + len; |
| |
| DIE_IF(dsize >= count); |
| |
| dest += dsize; |
| count -= dsize; |
| if (len >= count) |
| len = count - 1; |
| |
| memcpy(dest, src, len); |
| dest[len] = 0; |
| |
| return res; |
| } |