aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libbb/read_package_field.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/libbb/read_package_field.c b/libbb/read_package_field.c
index 246285f8e..3715230fe 100644
--- a/libbb/read_package_field.c
+++ b/libbb/read_package_field.c
@@ -7,24 +7,21 @@
7 */ 7 */
8extern char *read_package_field(const char *package_buffer) 8extern char *read_package_field(const char *package_buffer)
9{ 9{
10 char *field = NULL;
11 int field_length = 0; 10 int field_length = 0;
12 int buffer_length = 0; 11 int buffer_length = 0;
13 12
13 if (package_buffer == NULL) {
14 return(NULL);
15 }
14 buffer_length = strlen(package_buffer); 16 buffer_length = strlen(package_buffer);
15 17 field_length = strcspn(package_buffer, "\n");
16 while ((field = strchr(&package_buffer[field_length], '\n')) != NULL) { 18 while (field_length < buffer_length) {
17 field_length = buffer_length - strlen(field);
18 if (package_buffer[field_length + 1] != ' ') { 19 if (package_buffer[field_length + 1] != ' ') {
19 break; 20 return(xstrndup(package_buffer, field_length));
20 } else { 21 }
21 field_length++; 22 field_length++;
22 } 23 field_length += strcspn(&package_buffer[field_length], "\n");
23 }
24 if (field_length == 0) {
25 return(NULL);
26 } else {
27 return(xstrndup(package_buffer, field_length));
28 } 24 }
25 return(xstrdup(package_buffer));
29} 26}
30 27