#include "includes.h"
#include <ctype.h>
#include <string.h>
+#include <stdbool.h>
#include <errno.h>
#include "pkg.h"
{
pkg_t *pkg;
- pkg = malloc(sizeof(pkg_t));
+ pkg = calloc(1, sizeof(pkg_t));
if (pkg == NULL) {
fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
return NULL;
int pkg_init(pkg_t *pkg)
{
- memset(pkg, 0, sizeof(pkg_t));
pkg->name = NULL;
pkg->epoch = 0;
pkg->version = NULL;
pkg->recommends_str = NULL;
pkg->suggests_count = 0;
pkg->recommends_count = 0;
+
+ active_list_init(&pkg->list);
+ active_list_init(&pkg->searched_node);
/* Abhaya: added init for conflicts fields */
pkg->conflicts = NULL;
pkg->state_flag = SF_OK;
pkg->state_status = SS_NOT_INSTALLED;
- //for (i = 0; i < pkg->replaces_count; i++)
+ active_list_clear(&pkg->list);
+
free (pkg->replaces);
pkg->replaces = NULL;
{
abstract_pkg_t * ab_pkg;
- ab_pkg = malloc(sizeof(abstract_pkg_t));
+ ab_pkg = calloc(1, sizeof(abstract_pkg_t));
if (ab_pkg == NULL) {
fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
int abstract_pkg_init(abstract_pkg_t *ab_pkg)
{
- memset(ab_pkg, 0, sizeof(abstract_pkg_t));
-
ab_pkg->provided_by = abstract_pkg_vec_alloc();
if (ab_pkg->provided_by==NULL){
return -1;
}
ab_pkg->dependencies_checked = 0;
ab_pkg->state_status = SS_NOT_INSTALLED;
+ active_list_init(&ab_pkg->searched_node);
return 0;
}
char **raw =NULL;
char **raw_start=NULL;
- temp_str = (char *) malloc (strlen(pkg->dest->info_dir)+strlen(pkg->name)+12);
+ temp_str = (char *) calloc (1, strlen(pkg->dest->info_dir)+strlen(pkg->name)+12);
if (temp_str == NULL ){
opkg_message(conf, OPKG_INFO, "Out of memory in %s\n", __FUNCTION__);
return;
char *line;
char * buff;
- buff = malloc(8192);
+ buff = calloc(1, 8192);
if (buff == NULL) {
fprintf(stderr, "%s: out of memory\n", __FUNCTION__);
return NULL;
void pkg_print_info(pkg_t *pkg, FILE *file)
{
+ int t=0;
char * buff;
if (pkg == NULL) {
return;
if ( buff == NULL )
return;
if (strlen(buff)>2){
- fwrite(buff, 1, strlen(buff), file);
+ t = fwrite(buff, 1, strlen(buff), file); //#~rzr:TODO
}
free(buff);
}
can be found in th available file.
But, someone proposed the idea to make it possible to
- reconstruct a .ipk from an installed package, (ie. for beaming
+ reconstruct a .opk from an installed package, (ie. for beaming
from one handheld to another). So, maybe we actually want a few
more fields here, (depends, suggests, etc.), so that that would
be guaranteed to work even in the absence of more information
return NULL;
}
- /* For uninstalled packages, get the file list firectly from the package.
+ /* For uninstalled packages, get the file list directly from the package.
For installed packages, look at the package.list file in the database.
*/
if (pkg->state_status == SS_NOT_INSTALLED || pkg->dest == NULL) {
str_list_elt_t *iter;
pkg->installed_files_ref_cnt--;
- if (pkg->installed_files_ref_cnt > 0) {
+
+ if (pkg->installed_files_ref_cnt > 0)
return 0;
- }
if (pkg->installed_files) {
scripts when running with offline_root mode and/or a dest other
than '/'. I've been playing around with some clever chroot
tricks and I might come up with something workable. */
+ /*
+ * Attempt to provide a restricted environment for offline operation
+ * Need the following set as a minimum:
+ * OPKG_OFFLINE_ROOT = absolute path to root dir
+ * D = absolute path to root dir (for OE generated postinst)
+ * PATH = something safe (a restricted set of utilities)
+ */
+
+ bool AllowOfflineMode = false;
if (conf->offline_root) {
setenv("OPKG_OFFLINE_ROOT", conf->offline_root, 1);
+ setenv("D", conf->offline_root, 1);
+ if (NULL == conf->offline_root_path || '\0' == conf->offline_root_path[0]) {
+ setenv("PATH", "/dev/null", 1);
+ } else {
+ setenv("PATH", conf->offline_root_path, 1);
+ AllowOfflineMode = true;
+ }
}
setenv("PKG_ROOT",
return 0;
}
- if (conf->offline_root) {
+ if (conf->offline_root && !AllowOfflineMode) {
fprintf(stderr, "(offline root mode: not running %s.%s)\n", pkg->name, script);
free(path);
return 0;
// opkg_message(conf, OPKG_DEBUG2, "pkg %s: file=%s\n", pkg->name, installed_file);
file_hash_set_file_owner(conf, installed_file, pkg);
}
+ pkg_free_installed_files(pkg);
}
pkg_vec_free(installed_pkgs);
fclose(data.stream);
free(list_file_name);
+ pkg->state_flag &= ~SF_FILELIST_CHANGED;
+
return err;
}