X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;ds=sidebyside;f=archival%2Fdpkg.c;h=e90e82b641be059f108d4e5a3fed84dd1180d4de;hb=d553faf5a53cf9d72e16fc789451a92a797f1b70;hp=c40a932ece1d275a851a99321e5cca0c68d40df2;hpb=15611bb95815de14bcb35f66bd10089a322ea30b;p=oweals%2Fbusybox.git diff --git a/archival/dpkg.c b/archival/dpkg.c index c40a932ec..e90e82b64 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c @@ -582,10 +582,10 @@ static int read_package_field(const char *package_buffer, char **field_name, cha static unsigned fill_package_struct(char *control_buffer) { - static const char *const field_names[] = { "Package", "Version", - "Pre-Depends", "Depends","Replaces", "Provides", - "Conflicts", "Suggests", "Recommends", "Enhances", NULL - }; + static const char field_names[] ALIGN1 = + "Package\0""Version\0" + "Pre-Depends\0""Depends\0""Replaces\0""Provides\0" + "Conflicts\0""Suggests\0""Recommends\0""Enhances\0"; common_node_t *new_node = xzalloc(sizeof(common_node_t)); char *field_name; @@ -602,10 +602,10 @@ static unsigned fill_package_struct(char *control_buffer) &field_name, &field_value); if (field_name == NULL) { - goto fill_package_struct_cleanup; /* Oh no, the dreaded goto statement ! */ + goto fill_package_struct_cleanup; } - field_num = index_in_str_array(field_names, field_name); + field_num = index_in_strings(field_names, field_name); switch (field_num) { case 0: /* Package */ new_node->name = search_name_hashtable(field_value); @@ -712,7 +712,7 @@ static void set_status(const unsigned status_node_num, const char *new_value, co static const char *describe_status(int status_num) { - int status_want, status_state ; + int status_want, status_state; if (status_hashtable[status_num] == NULL || status_hashtable[status_num]->status == 0) return "is not installed or flagged to be installed"; @@ -745,7 +745,7 @@ static void index_status_file(const char *filename) unsigned status_num; status_file = xfopen(filename, "r"); - while ((control_buffer = xmalloc_fgets_str(status_file, "\n\n")) != NULL) { + while ((control_buffer = xmalloc_fgetline_str(status_file, "\n\n")) != NULL) { const unsigned package_num = fill_package_struct(control_buffer); if (package_num != -1) { status_node = xmalloc(sizeof(status_node_t)); @@ -798,7 +798,7 @@ static void write_status_file(deb_file_t **deb_file) int i = 0; /* Update previously known packages */ - while ((control_buffer = xmalloc_fgets_str(old_status_file, "\n\n")) != NULL) { + while ((control_buffer = xmalloc_fgetline_str(old_status_file, "\n\n")) != NULL) { tmp_string = strstr(control_buffer, "Package:"); if (tmp_string == NULL) { continue; @@ -913,20 +913,16 @@ static void write_status_file(deb_file_t **deb_file) fclose(old_status_file); fclose(new_status_file); - /* Create a separate backfile to dpkg */ if (rename("/var/lib/dpkg/status", "/var/lib/dpkg/status.udeb.bak") == -1) { - struct stat stat_buf; - xstat("/var/lib/dpkg/status", &stat_buf); + if (errno != ENOENT) + bb_error_msg_and_die("cannot create backup status file"); /* Its ok if renaming the status file fails because status * file doesnt exist, maybe we are starting from scratch */ bb_error_msg("no status file found, creating new one"); } - if (rename("/var/lib/dpkg/status.udeb", "/var/lib/dpkg/status") == -1) { - bb_error_msg_and_die("DANGER: cannot create status file, " - "you need to manually repair your status file"); - } + xrename("/var/lib/dpkg/status.udeb", "/var/lib/dpkg/status"); } /* This function returns TRUE if the given package can satisfy a @@ -1227,7 +1223,7 @@ static int run_package_script(const char *package_name, const char *script_type) return result; } -static const char *all_control_files[] = { +static const char *const all_control_files[] = { "preinst", "postinst", "prerm", "postrm", "list", "md5sums", "shlibs", "conffiles", "config", "templates", NULL @@ -1344,7 +1340,7 @@ static void remove_package(const unsigned package_num, int noisy) free_array(exclude_files); /* rename .conffile to .list */ - rename(conffile_name, list_name); + xrename(conffile_name, list_name); /* Change package status */ set_status(status_num, "config-files", 3); @@ -1412,10 +1408,10 @@ static void init_archive_deb_control(archive_handle_t *ar_handle) tar_handle->src_fd = ar_handle->src_fd; /* We don't care about data.tar.* or debian-binary, just control.tar.* */ -#ifdef CONFIG_FEATURE_DEB_TAR_GZ +#if ENABLE_FEATURE_DEB_TAR_GZ llist_add_to(&(ar_handle->accept), (char*)"control.tar.gz"); #endif -#ifdef CONFIG_FEATURE_DEB_TAR_BZ2 +#if ENABLE_FEATURE_DEB_TAR_BZ2 llist_add_to(&(ar_handle->accept), (char*)"control.tar.bz2"); #endif @@ -1432,10 +1428,10 @@ static void init_archive_deb_data(archive_handle_t *ar_handle) tar_handle->src_fd = ar_handle->src_fd; /* We don't care about control.tar.* or debian-binary, just data.tar.* */ -#ifdef CONFIG_FEATURE_DEB_TAR_GZ +#if ENABLE_FEATURE_DEB_TAR_GZ llist_add_to(&(ar_handle->accept), (char*)"data.tar.gz"); #endif -#ifdef CONFIG_FEATURE_DEB_TAR_BZ2 +#if ENABLE_FEATURE_DEB_TAR_BZ2 llist_add_to(&(ar_handle->accept), (char*)"data.tar.bz2"); #endif @@ -1557,7 +1553,7 @@ static void configure_package(deb_file_t *deb_file) set_status(status_num, "installed", 3); } -int dpkg_main(int argc, char **argv); +int dpkg_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int dpkg_main(int argc, char **argv) { deb_file_t **deb_file = NULL; @@ -1579,7 +1575,7 @@ int dpkg_main(int argc, char **argv) OPT_unpack = 0x40, }; - opt = getopt32(argc, argv, "CF:ilPru", &str_f); + opt = getopt32(argv, "CF:ilPru", &str_f); //if (opt & OPT_configure) ... // -C if (opt & OPT_force_ignore_depends) { // -F (--force in official dpkg) if (strcmp(str_f, "depends"))