diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-26 20:44:45 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-26 20:44:45 +0000 |
commit | abee3d0e0dc7c7e4b733b0145c56bf8159a37a69 (patch) | |
tree | bf000d88c4044106f689060ee795d49f9a9116f6 /archival | |
parent | d55268d0d497856a34f732aca158d07276358ab6 (diff) | |
download | busybox-w32-abee3d0e0dc7c7e4b733b0145c56bf8159a37a69.tar.gz busybox-w32-abee3d0e0dc7c7e4b733b0145c56bf8159a37a69.tar.bz2 busybox-w32-abee3d0e0dc7c7e4b733b0145c56bf8159a37a69.zip |
Fix xmalloc_fgets_str so that it really does NOT strip terminator.
Add xmalloc_fgetline_str which does strip terminator,
and use it in dpkg instead of xmalloc_fgets_str.
netstat: use xmalloc_fgets_str - allows to eat strings with NULs
(this fixes bug with some weird /proc/net/unix input)
function old new delta
xmalloc_fgets_internal - 191 +191
xmalloc_fgetline_str - 18 +18
do_info 116 120 +4
unix_do_one 451 447 -4
tcp_do_one 423 419 -4
send_tree 369 365 -4
xmalloc_fgets_str 178 15 -163
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 1/4 up/down: 213/-175) Total: 38 bytes
text data bss dec hex filename
778445 832 7344 786621 c00bd busybox_old
778483 832 7344 786659 c00e3 busybox_unstripped
Diffstat (limited to 'archival')
-rw-r--r-- | archival/dpkg.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/archival/dpkg.c b/archival/dpkg.c index 27512eb5d..1db53f494 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c | |||
@@ -602,7 +602,7 @@ static unsigned fill_package_struct(char *control_buffer) | |||
602 | &field_name, &field_value); | 602 | &field_name, &field_value); |
603 | 603 | ||
604 | if (field_name == NULL) { | 604 | if (field_name == NULL) { |
605 | goto fill_package_struct_cleanup; /* Oh no, the dreaded goto statement! */ | 605 | goto fill_package_struct_cleanup; |
606 | } | 606 | } |
607 | 607 | ||
608 | field_num = index_in_strings(field_names, field_name); | 608 | field_num = index_in_strings(field_names, field_name); |
@@ -745,7 +745,7 @@ static void index_status_file(const char *filename) | |||
745 | unsigned status_num; | 745 | unsigned status_num; |
746 | 746 | ||
747 | status_file = xfopen(filename, "r"); | 747 | status_file = xfopen(filename, "r"); |
748 | while ((control_buffer = xmalloc_fgets_str(status_file, "\n\n")) != NULL) { | 748 | while ((control_buffer = xmalloc_fgetline_str(status_file, "\n\n")) != NULL) { |
749 | const unsigned package_num = fill_package_struct(control_buffer); | 749 | const unsigned package_num = fill_package_struct(control_buffer); |
750 | if (package_num != -1) { | 750 | if (package_num != -1) { |
751 | status_node = xmalloc(sizeof(status_node_t)); | 751 | status_node = xmalloc(sizeof(status_node_t)); |
@@ -798,7 +798,7 @@ static void write_status_file(deb_file_t **deb_file) | |||
798 | int i = 0; | 798 | int i = 0; |
799 | 799 | ||
800 | /* Update previously known packages */ | 800 | /* Update previously known packages */ |
801 | while ((control_buffer = xmalloc_fgets_str(old_status_file, "\n\n")) != NULL) { | 801 | while ((control_buffer = xmalloc_fgetline_str(old_status_file, "\n\n")) != NULL) { |
802 | tmp_string = strstr(control_buffer, "Package:"); | 802 | tmp_string = strstr(control_buffer, "Package:"); |
803 | if (tmp_string == NULL) { | 803 | if (tmp_string == NULL) { |
804 | continue; | 804 | continue; |