summaryrefslogtreecommitdiffstats
path: root/libopkg
diff options
context:
space:
mode:
authorgraham.gower@gmail.com <graham.gower@gmail.com@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2011-02-13 21:46:01 (EST)
committer graham.gower@gmail.com <graham.gower@gmail.com@e8e0d7a0-c8d9-11dd-a880-a1081c7ac358>2011-02-13 21:46:01 (EST)
commit0f54da55b8717543b08596e58c022ae49e70a184 (patch)
tree6fe6026cf028f763593a156a349e79969d7df6e9 /libopkg
parent2e7f79df655f82bf42ed2a06fea1a036d3d37024 (diff)
Add overlay_root config option. Opkg checks this location for available space.
This option is useful in the case where root is mounted ro, and another rw filesystem is overlaid on top with e.g. mini_fo. From Nicolas Thill via OpenWrt. git-svn-id: http://opkg.googlecode.com/svn/trunk@601 e8e0d7a0-c8d9-11dd-a880-a1081c7ac358
Diffstat (limited to 'libopkg')
-rw-r--r--libopkg/opkg_conf.c1
-rw-r--r--libopkg/opkg_conf.h1
-rw-r--r--libopkg/opkg_install.c18
3 files changed, 17 insertions, 3 deletions
diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c
index acac1b4..864d2ac 100644
--- a/libopkg/opkg_conf.c
+++ b/libopkg/opkg_conf.c
@@ -63,6 +63,7 @@ opkg_option_t options[] = {
{ "download_only", OPKG_OPT_TYPE_BOOL, &_conf.download_only },
{ "nodeps", OPKG_OPT_TYPE_BOOL, &_conf.nodeps },
{ "offline_root", OPKG_OPT_TYPE_STRING, &_conf.offline_root },
+ { "overlay_root", OPKG_OPT_TYPE_STRING, &_conf.overlay_root },
{ "proxy_passwd", OPKG_OPT_TYPE_STRING, &_conf.proxy_passwd },
{ "proxy_user", OPKG_OPT_TYPE_STRING, &_conf.proxy_user },
{ "query-all", OPKG_OPT_TYPE_BOOL, &_conf.query_all },
diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h
index af6b9ab..0340ff2 100644
--- a/libopkg/opkg_conf.h
+++ b/libopkg/opkg_conf.h
@@ -79,6 +79,7 @@ struct opkg_conf
int check_signature;
int nodeps; /* do not follow dependencies */
char *offline_root;
+ char *overlay_root;
int query_all;
int verbosity;
int noaction;
diff --git a/libopkg/opkg_install.c b/libopkg/opkg_install.c
index 7838875..74a2ce1 100644
--- a/libopkg/opkg_install.c
+++ b/libopkg/opkg_install.c
@@ -21,6 +21,7 @@
#include <time.h>
#include <signal.h>
#include <unistd.h>
+#include <sys/stat.h>
#include "pkg.h"
#include "pkg_hash.h"
@@ -192,13 +193,24 @@ static int
verify_pkg_installable(pkg_t *pkg)
{
unsigned long kbs_available, pkg_size_kbs;
- char *root_dir;
+ char *root_dir = NULL;
+ struct stat s;
if (conf->force_space || pkg->installed_size == 0)
return 0;
- root_dir = pkg->dest ? pkg->dest->root_dir :
- conf->default_dest->root_dir;
+ if (pkg->dest)
+ {
+ if (!strcmp(pkg->dest->name, "root") && conf->overlay_root
+ && !stat(conf->overlay_root, &s) && (s.st_mode & S_IFDIR))
+ root_dir = conf->overlay_root;
+ else
+ root_dir = pkg->dest->root_dir;
+ }
+
+ if (!root_dir)
+ root_dir = conf->default_dest->root_dir;
+
kbs_available = get_available_kbytes(root_dir);
pkg_size_kbs = (pkg->installed_size + 1023)/1024;