diff options
author | pixdamix <pixdamix@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358> | 2009-11-23 03:28:58 (EST) |
---|---|---|
committer | pixdamix <pixdamix@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358> | 2009-11-23 03:28:58 (EST) |
commit | b5023b1788eb78b8c1d521e28dd89c540cf92773 (patch) | |
tree | 1483d079fc41652815a1315fcbe75b50f36508a6 /libopkg | |
parent | dc51de137b84352e22ad99911607779658816ae1 (diff) |
Allow to install a package from a read-only dir
This patch allows to install a package which is located on
a readonly filesystem or folder by moving the control file
into the tmp_dir directory
git-svn-id: http://opkg.googlecode.com/svn/trunk@351 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358
Diffstat (limited to 'libopkg')
-rw-r--r-- | libopkg/opkg_download.c | 4 | ||||
-rw-r--r-- | libopkg/opkg_install.c | 2 | ||||
-rw-r--r-- | libopkg/pkg.c | 6 | ||||
-rw-r--r-- | libopkg/pkg.h | 2 |
4 files changed, 8 insertions, 6 deletions
diff --git a/libopkg/opkg_download.c b/libopkg/opkg_download.c index 953627b..4789249 100644 --- a/libopkg/opkg_download.c +++ b/libopkg/opkg_download.c @@ -276,7 +276,7 @@ int opkg_prepare_url_for_install(opkg_conf_t *conf, const char *url, char **name if (err) return err; - err = pkg_init_from_file(pkg, tmp_file); + err = pkg_init_from_file(conf, pkg, tmp_file); if (err) return err; @@ -287,7 +287,7 @@ int opkg_prepare_url_for_install(opkg_conf_t *conf, const char *url, char **name || strcmp(&url[strlen(url) - 4], IPKG_PKG_EXTENSION) == 0 || strcmp(&url[strlen(url) - 4], DPKG_PKG_EXTENSION) == 0) { - err = pkg_init_from_file(pkg, url); + err = pkg_init_from_file(conf, pkg, url); if (err) return err; opkg_message(conf, OPKG_DEBUG2, "Package %s provided by hand (%s).\n", pkg->name,pkg->local_filename); diff --git a/libopkg/opkg_install.c b/libopkg/opkg_install.c index f9245ca..96e6080 100644 --- a/libopkg/opkg_install.c +++ b/libopkg/opkg_install.c @@ -85,7 +85,7 @@ int opkg_install_from_file(opkg_conf_t *conf, const char *filename) pkg = pkg_new(); - err = pkg_init_from_file(pkg, filename); + err = pkg_init_from_file(conf, pkg, filename); if (err) { return err; } diff --git a/libopkg/pkg.c b/libopkg/pkg.c index 75e9572..89f47a9 100644 --- a/libopkg/pkg.c +++ b/libopkg/pkg.c @@ -301,7 +301,7 @@ void pkg_deinit(pkg_t *pkg) } int -pkg_init_from_file(pkg_t *pkg, const char *filename) +pkg_init_from_file(opkg_conf_t *conf, pkg_t *pkg, const char *filename) { int fd, err = 0; FILE *control_file; @@ -311,7 +311,9 @@ pkg_init_from_file(pkg_t *pkg, const char *filename) pkg->local_filename = xstrdup(filename); - sprintf_alloc(&control_path, "%s.control.XXXXXX", filename); + sprintf_alloc(&control_path, "%s/%s.control.XXXXXX", + conf->tmp_dir, + basename(filename)); fd = mkstemp(control_path); if (fd == -1) { perror_msg("%s: mkstemp(%s)", __FUNCTION__, control_path); diff --git a/libopkg/pkg.h b/libopkg/pkg.h index 2e25443..694bda9 100644 --- a/libopkg/pkg.h +++ b/libopkg/pkg.h @@ -190,7 +190,7 @@ struct pkg pkg_t *pkg_new(void); int pkg_init(pkg_t *pkg); void pkg_deinit(pkg_t *pkg); -int pkg_init_from_file(pkg_t *pkg, const char *filename); +int pkg_init_from_file(opkg_conf_t *conf, pkg_t *pkg, const char *filename); abstract_pkg_t *abstract_pkg_new(void); int abstract_pkg_init(abstract_pkg_t *ab_pkg); |