From 8b44d858a9895bfaec1f78562c9619c5652d9056 Mon Sep 17 00:00:00 2001 From: ticktock35 Date: Mon, 15 Dec 2008 04:20:45 +0000 Subject: [PATCH] opkg: add a status flag to record if the package was automatically installed to satisfy a dependency git-svn-id: http://opkg.googlecode.com/svn/trunk@24 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358 --- opkg_install.c | 3 +++ pkg.c | 8 ++++++++ pkg.h | 4 ++++ pkg_parse.c | 9 +++++++++ 4 files changed, 24 insertions(+) diff --git a/opkg_install.c b/opkg_install.c index 242db59..b278724 100644 --- a/opkg_install.c +++ b/opkg_install.c @@ -413,6 +413,9 @@ int satisfy_dependencies_for(opkg_conf_t *conf, pkg_t *pkg) && (dep->state_status != SS_UNPACKED)) { opkg_message(conf, OPKG_DEBUG2,"Function: %s calling opkg_install_pkg \n",__FUNCTION__); err = opkg_install_pkg(conf, dep,0); + /* mark this package as having been automatically installed to + * satisfy a dependancy */ + dep->auto_installed = 1; if (err) { pkg_vec_free(depends); return err; diff --git a/pkg.c b/pkg.c index 1202845..fe9118f 100644 --- a/pkg.c +++ b/pkg.c @@ -558,6 +558,13 @@ char * pkg_formatted_field(pkg_t *pkg, const char *field ) temp[0]='\0'; snprintf(temp, (strlen(pkg->architecture)+17), "Architecture: %s\n", pkg->architecture); } + } else if (strcasecmp(field, "Auto-Installed") == 0) { + /* Auto-Installed flag */ + if (pkg->auto_installed) { + char * s = "Auto-Installed: yes\n"; + temp = (char *)realloc(temp, strlen(s) + 1); + strcpy (temp, s); + } } else { goto UNKNOWN_FMT_FIELD; } @@ -1017,6 +1024,7 @@ void pkg_print_status(pkg_t * pkg, FILE * file) pkg_print_field(pkg, file, "Architecture"); pkg_print_field(pkg, file, "Conffiles"); pkg_print_field(pkg, file, "Installed-Time"); + pkg_print_field(pkg, file, "Auto-Installed"); fputs("\n", file); } diff --git a/pkg.h b/pkg.h index 665191b..ffb969b 100644 --- a/pkg.h +++ b/pkg.h @@ -176,6 +176,10 @@ struct pkg int arch_priority; /* Adding this flag, to "force" opkg to choose a "provided_by_hand" package, if there are multiple choice */ int provided_by_hand; + + /* this flag specifies whether the package was installed to satisfy another + * package's dependancies */ + int auto_installed; }; pkg_t *pkg_new(void); diff --git a/pkg_parse.c b/pkg_parse.c index da245cc..d654e5d 100644 --- a/pkg_parse.c +++ b/pkg_parse.c @@ -267,6 +267,15 @@ int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest) case 'A': if(isGenericFieldType("Architecture:", *lines)) pkg->architecture = parseGenericFieldType("Architecture", *lines); + else if(isGenericFieldType("Auto-Installed:", *lines)) { + char *auto_installed_value; + auto_installed_value = parseGenericFieldType("Auto-Installed:", *lines); + if (strcmp(auto_installed_value, "yes") == 0) { + pkg->auto_installed = 1; + } + free(auto_installed_value); + pkg->architecture = parseGenericFieldType("Auto-Installed", *lines); + } break; case 'F': -- 2.25.1