diff options
Diffstat (limited to 'libmultipath/print.c')
-rw-r--r-- | libmultipath/print.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/libmultipath/print.c b/libmultipath/print.c index 7c2a158..95dff90 100644 --- a/libmultipath/print.c +++ b/libmultipath/print.c @@ -39,9 +39,18 @@ do { \ s = c; \ } while (0) -#define ENDLINE \ - if (c > line) \ - line[c - line - 1] = '\n' +static char * +__endline(char *line, size_t len, char *c) +{ + if (c > line) { + if (c >= line + len) + c = line + len - 1; + *(c - 1) = '\n'; + *c = '\0'; + } + return c; +} + #define PRINT(var, size, format, args...) \ do { \ fwd = snprintf(var, size, format, ##args); \ @@ -802,7 +811,7 @@ snprint_multipath_header (char * line, int len, char * format) PAD(data->width); } while (*f++); - ENDLINE; + __endline(line, len, c); return (c - line); } @@ -838,7 +847,7 @@ snprint_multipath (char * line, int len, char * format, buff[0] = '\0'; } while (*f++); - ENDLINE; + __endline(line, len, c); return (c - line); } @@ -869,7 +878,7 @@ snprint_path_header (char * line, int len, char * format) PAD(data->width); } while (*f++); - ENDLINE; + __endline(line, len, c); return (c - line); } @@ -904,7 +913,7 @@ snprint_path (char * line, int len, char * format, PAD(data->width); } while (*f++); - ENDLINE; + __endline(line, len, c); return (c - line); } @@ -938,7 +947,7 @@ snprint_pathgroup (char * line, int len, char * format, PAD(data->width); } while (*f++); - ENDLINE; + __endline(line, len, c); return (c - line); } |