General Public License for more details.
*/
-#include "includes.h"
-#include "opkg_conf.h"
+#include "config.h"
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <glob.h>
+#include <unistd.h>
+#include "opkg_conf.h"
+#include "pkg_vec.h"
+#include "pkg.h"
#include "xregex.h"
#include "sprintf_alloc.h"
-#include "args.h"
#include "opkg_message.h"
#include "file_util.h"
#include "opkg_defines.h"
#include "libbb/libbb.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <glob.h>
-
static int lock_fd;
static char *lock_file = NULL;
{ "no_proxy", OPKG_OPT_TYPE_STRING, &_conf.no_proxy },
{ "test", OPKG_OPT_TYPE_BOOL, &_conf.noaction },
{ "noaction", OPKG_OPT_TYPE_BOOL, &_conf.noaction },
+ { "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 },
{ "proxy_passwd", OPKG_OPT_TYPE_STRING, &_conf.proxy_passwd },
dest = (pkg_dest_t *)iter->data;
dest->status_fp = fopen(dest->status_file_name, "w");
- if (dest->status_fp == NULL) {
+ if (dest->status_fp == NULL && errno != EROFS) {
opkg_perror(ERROR, "Can't open status file %s",
dest->status_file_name);
ret = -1;
list_for_each_entry(iter, &conf->pkg_dest_list.head, node) {
dest = (pkg_dest_t *)iter->data;
- if (fclose(dest->status_fp) == EOF) {
+ if (dest->status_fp && fclose(dest->status_fp) == EOF) {
opkg_perror(ERROR, "Couldn't close %s", dest->status_file_name);
ret = -1;
}
globfree(&globbuf);
if (conf->offline_root)
- sprintf_alloc (&lock_file, "%s/%s/lock", conf->offline_root, OPKG_STATE_DIR_PREFIX);
+ sprintf_alloc (&lock_file, "%s/%s", conf->offline_root, OPKGLOCKFILE);
else
- sprintf_alloc (&lock_file, "%s/lock", OPKG_STATE_DIR_PREFIX);
+ sprintf_alloc (&lock_file, "%s", OPKGLOCKFILE);
lock_fd = creat(lock_file, S_IRUSR | S_IWUSR | S_IRGRP);
if (lock_fd == -1) {
if (lockf(lock_fd, F_TLOCK, (off_t)0) == -1) {
opkg_perror(ERROR, "Could not lock %s", lock_file);
- goto err3;
+ if (close(lock_fd) == -1)
+ opkg_perror(ERROR, "Couldn't close descriptor %d (%s)",
+ lock_fd, lock_file);
+ goto err2;
}
if (conf->tmp_dir)
conf->tmp_dir = mkdtemp(tmp);
if (conf->tmp_dir == NULL) {
opkg_perror(ERROR, "Creating temp dir %s failed", tmp);
- goto err4;
+ goto err3;
}
pkg_hash_init();
}
if (resolve_pkg_dest_list(&tmp_dest_nv_pair_list))
- goto err5;
+ goto err4;
nv_pair_list_deinit(&tmp_dest_nv_pair_list);
return 0;
-err5:
+err4:
free(conf->lists_dir);
pkg_hash_deinit();
if (rmdir(conf->tmp_dir) == -1)
opkg_perror(ERROR, "Couldn't remove dir %s", conf->tmp_dir);
-err4:
+err3:
if (lockf(lock_fd, F_ULOCK, (off_t)0) == -1)
opkg_perror(ERROR, "Couldn't unlock %s", lock_file);
-err3:
+
if (close(lock_fd) == -1)
opkg_perror(ERROR, "Couldn't close descriptor %d (%s)",
lock_fd, lock_file);