diff --git a/usr.sbin/pkg_install/lib/lib.h b/usr.sbin/pkg_install/lib/lib.h index b7ca695c874..afa68afcf9f 100644 --- a/usr.sbin/pkg_install/lib/lib.h +++ b/usr.sbin/pkg_install/lib/lib.h @@ -147,6 +147,7 @@ off_t min_free(const char *); /* String */ char *get_dash_string(char **); char *copy_string(const char *); +char *copy_string_adds_newline(const char *); Boolean suffix(const char *, const char *); void nuke_suffix(char *); void str_lowercase(char *); diff --git a/usr.sbin/pkg_install/lib/str.c b/usr.sbin/pkg_install/lib/str.c index 8f6aec33d26..0d9e288b757 100644 --- a/usr.sbin/pkg_install/lib/str.c +++ b/usr.sbin/pkg_install/lib/str.c @@ -42,7 +42,7 @@ get_dash_string(char **str) char *s = *str; if (*s == '-') - *str = copy_string(s + 1); + *str = copy_string_adds_newline(s + 1); else *str = fileGetContents(s); return *str; @@ -55,6 +55,27 @@ copy_string(const char *str) return (str ? strdup(str) : NULL); } +/* Rather Obvious but adds a trailing \n newline */ +char * +copy_string_adds_newline(const char *str) +{ + if (str == NULL) { + return (NULL); + } else { + char *copy; + size_t line_length; + + line_length = strlen(str) + 2; + if ((copy = malloc(line_length)) == NULL) + return (NULL); + memcpy(copy, str, line_length - 2); + copy[line_length - 2] = '\n'; /* Adds trailing \n */ + copy[line_length - 1] = '\0'; + + return (copy); + } +} + /* Return TRUE if 'str' ends in suffix 'suff' */ Boolean suffix(const char *str, const char *suff)