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
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;
|| 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);
pkg = pkg_new();
- err = pkg_init_from_file(pkg, filename);
+ err = pkg_init_from_file(conf, pkg, filename);
if (err) {
return err;
}
}
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;
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);
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);