diff options
Diffstat (limited to 'package/busybox/patches/524-memory_usage.patch')
-rw-r--r-- | package/busybox/patches/524-memory_usage.patch | 241 |
1 files changed, 0 insertions, 241 deletions
diff --git a/package/busybox/patches/524-memory_usage.patch b/package/busybox/patches/524-memory_usage.patch deleted file mode 100644 index 5aaee76087..0000000000 --- a/package/busybox/patches/524-memory_usage.patch +++ /dev/null @@ -1,241 +0,0 @@ ---- a/archival/libipkg/pkg.c -+++ b/archival/libipkg/pkg.c -@@ -224,8 +224,7 @@ - if (err) { return err; } - - rewind(control_file); -- raw = read_raw_pkgs_from_stream(control_file); -- pkg_parse_raw(pkg, &raw, NULL, NULL); -+ pkg_parse_stream(pkg, control_file, NULL, NULL); - - fclose(control_file); - ---- a/archival/libipkg/pkg_hash.c -+++ b/archival/libipkg/pkg_hash.c -@@ -89,20 +89,20 @@ - pkg_src_t *src, pkg_dest_t *dest, int is_status_file) - { - hash_table_t *hash = &conf->pkg_hash; -- char **raw; -- char **raw_start; -+ FILE *fp; - pkg_t *pkg; - -- raw = raw_start = read_raw_pkgs_from_file(file_name); -- if (!raw) -- return -ENOMEM; -+ if(!(fp = fopen(file_name, "r"))){ -+ fprintf(stderr, "can't get %s open for read\n", file_name); -+ return NULL; -+ } - -- while(*raw){ /* don't worry, we'll increment raw in the parsing function */ -+ while(!feof(fp)) { /* don't worry, we'll increment raw in the parsing function */ - pkg = pkg_new(); - if (!pkg) - return -ENOMEM; - -- if (pkg_parse_raw(pkg, &raw, src, dest) == 0) { -+ if (pkg_parse_stream(pkg, fp, src, dest) == 0) { - if (!pkg->architecture) { - char *version_str = pkg_version_str_alloc(pkg); - pkg->architecture = pkg_get_default_arch(conf); -@@ -116,13 +116,6 @@ - } - } - -- /* XXX: CLEANUP: I'd like a cleaner interface for cleaning up -- memory after read_raw_pkgs_from_file */ -- raw = raw_start; -- while (*raw) { -- free(*raw++); -- } -- free(raw_start); - return 0; - } - ---- a/archival/libipkg/pkg_parse.c -+++ b/archival/libipkg/pkg_parse.c -@@ -224,6 +224,161 @@ - Enhances, perhaps we could generalize all of these and save some - code duplication. - */ -+int pkg_parse_stream(pkg_t *pkg, FILE *stream, pkg_src_t *src, pkg_dest_t *dest) -+{ -+ int reading_conffiles, reading_description; -+ int pkg_false_provides=1; -+ char ** lines; -+ char *provide=NULL; -+ char *buf, *scout; -+ int count = 0; -+ size_t size = 512; -+ -+ buf = malloc (size); -+ -+ pkg->src = src; -+ pkg->dest = dest; -+ -+ reading_conffiles = reading_description = 0; -+ -+ while (fgets(buf, size, stream)) { -+ while (strlen (buf) == (size - 1) -+ && buf[size-2] != '\n') { -+ size_t o = size - 1; -+ size *= 2; -+ buf = realloc (buf, size); -+ if (fgets (buf + o, size - o, stream) == NULL) -+ break; -+ } -+ -+ if((scout = strchr(buf, '\n'))) -+ *scout = '\0'; -+ -+ lines = &buf; -+ /* fprintf(stderr, "PARSING %s\n", *lines);*/ -+ if(isGenericFieldType("Package:", *lines)) -+ pkg->name = parseGenericFieldType("Package", *lines); -+ else if(isGenericFieldType("Architecture:", *lines)) -+ pkg->architecture = parseGenericFieldType("Architecture", *lines); -+ else if(isGenericFieldType("Filename:", *lines)) -+ pkg->filename = parseGenericFieldType("Filename", *lines); -+ else if(isGenericFieldType("Section:", *lines)) -+ pkg->section = parseGenericFieldType("Section", *lines); -+ else if(isGenericFieldType("MD5sum:", *lines)) -+ pkg->md5sum = parseGenericFieldType("MD5sum", *lines); -+ /* The old ipkg wrote out status files with the wrong case for MD5sum, -+ let's parse it either way */ -+ else if(isGenericFieldType("MD5Sum:", *lines)) -+ pkg->md5sum = parseGenericFieldType("MD5Sum", *lines); -+ else if(isGenericFieldType("Size:", *lines)) -+ pkg->size = parseGenericFieldType("Size", *lines); -+ else if(isGenericFieldType("Source:", *lines)) -+ pkg->source = parseGenericFieldType("Source", *lines); -+ else if(isGenericFieldType("Installed-Size:", *lines)) -+ pkg->installed_size = parseGenericFieldType("Installed-Size", *lines); -+ else if(isGenericFieldType("Installed-Time:", *lines)) { -+ char *time_str = parseGenericFieldType("Installed-Time", *lines); -+ pkg->installed_time = strtoul(time_str, NULL, 0); -+ } else if(isGenericFieldType("Priority:", *lines)) -+ pkg->priority = parseGenericFieldType("Priority", *lines); -+ else if(isGenericFieldType("Essential:", *lines)) { -+ char *essential_value; -+ essential_value = parseGenericFieldType("Essential", *lines); -+ if (strcmp(essential_value, "yes") == 0) { -+ pkg->essential = 1; -+ } -+ free(essential_value); -+ } -+ else if(isGenericFieldType("Status", *lines)) -+ parseStatus(pkg, *lines); -+ else if(isGenericFieldType("Version", *lines)) -+ parseVersion(pkg, *lines); -+ else if(isGenericFieldType("Maintainer", *lines)) -+ pkg->maintainer = parseGenericFieldType("Maintainer", *lines); -+ else if(isGenericFieldType("Conffiles", *lines)){ -+ parseConffiles(pkg, *lines); -+ reading_conffiles = 1; -+ } -+ else if(isGenericFieldType("Description", *lines)) { -+ pkg->description = parseGenericFieldType("Description", *lines); -+ reading_conffiles = 0; -+ reading_description = 1; -+ } -+ -+ else if(isGenericFieldType("Provides", *lines)){ -+/* Here we add the internal_use to align the off by one problem between provides_str and provides */ -+ provide = (char * ) malloc(strlen(*lines)+ 35 ); /* Preparing the space for the new ipkg_internal_use_only */ -+ if ( alterProvidesLine(*lines,provide) ){ -+ return EINVAL; -+ } -+ pkg->provides_str = parseDependsString( provide, &pkg->provides_count); -+/* Let's try to hack a bit here. -+ The idea is that if a package has no Provides, we would add one generic, to permit the check of dependencies -+ in alot of other places. We will remove it before writing down the status database */ -+ pkg_false_provides=0; -+ free(provide); -+ } -+ -+ else if(isGenericFieldType("Depends", *lines)) -+ pkg->depends_str = parseDependsString(*lines, &pkg->depends_count); -+ else if(isGenericFieldType("Pre-Depends", *lines)) -+ pkg->pre_depends_str = parseDependsString(*lines, &pkg->pre_depends_count); -+ else if(isGenericFieldType("Recommends", *lines)) -+ pkg->recommends_str = parseDependsString(*lines, &pkg->recommends_count); -+ else if(isGenericFieldType("Suggests", *lines)) -+ pkg->suggests_str = parseDependsString(*lines, &pkg->suggests_count); -+ /* Abhaya: support for conflicts */ -+ else if(isGenericFieldType("Conflicts", *lines)) -+ pkg->conflicts_str = parseDependsString(*lines, &pkg->conflicts_count); -+ else if(isGenericFieldType("Replaces", *lines)) -+ pkg->replaces_str = parseDependsString(*lines, &pkg->replaces_count); -+ else if(line_is_blank(*lines)) { -+ break; -+ } -+ else if(**lines == ' '){ -+ if(reading_description) { -+ /* we already know it's not blank, so the rest of description */ -+ pkg->description = realloc(pkg->description, -+ strlen(pkg->description) -+ + 1 + strlen(*lines) + 1); -+ strcat(pkg->description, "\n"); -+ strcat(pkg->description, (*lines)); -+ } -+ else if(reading_conffiles) -+ parseConffiles(pkg, *lines); -+ } -+ } -+/* If the ipk has not a Provides line, we insert our false line */ -+ if ( pkg_false_provides==1) -+ pkg->provides_str = parseDependsString ((char *)"Provides: ipkg_internal_use_only ", &pkg->provides_count); -+ -+ free(buf); -+ if (pkg->name) { -+ return 0; -+ } else { -+ return EINVAL; -+ } -+} -+ -+#if 0 -+ -+/* Some random thoughts from Carl: -+ -+ This function could be considerably simplified if we just kept -+ an array of all the generic string-valued field names, and looped -+ through those looking for a match. Also, these fields could perhaps -+ be stored in the package as an array as well, (or, probably better, -+ as an nv_pair_list_t). -+ -+ Fields which require special parsing or storage, (such as Depends: -+ and Status:) could be handled as they are now. -+*/ -+/* XXX: FEATURE: The Suggests: field needs to be changed from a string -+ to a dependency list. And, since we already have -+ Depends/Pre-Depends and need to add Conflicts, Recommends, and -+ Enhances, perhaps we could generalize all of these and save some -+ code duplication. -+*/ - int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest) - { - int reading_conffiles, reading_description; -@@ -342,6 +497,7 @@ - return EINVAL; - } - } -+#endif - - int pkg_valorize_other_field(pkg_t *pkg, char ***raw) - { ---- a/archival/libipkg/pkg_parse.h -+++ b/archival/libipkg/pkg_parse.h -@@ -25,7 +25,10 @@ - char ** parseDependsString(char * raw, int * depends_count); - int parseVersion(pkg_t *pkg, char *raw); - void parseConffiles(pkg_t * pkg, char * raw); -+#if 0 - int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest); -+#endif -+int pkg_parse_stream(pkg_t *pkg, FILE *stream, pkg_src_t *src, pkg_dest_t *dest); - int pkg_valorize_other_field(pkg_t *pkg, char ***raw); - - #endif |