summaryrefslogtreecommitdiffstats
path: root/package/busybox/patches/524-memory_usage.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/busybox/patches/524-memory_usage.patch')
-rw-r--r--package/busybox/patches/524-memory_usage.patch241
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 5aaee7608..000000000
--- 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