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;
&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);
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\n";
+ return "is not installed or flagged to be installed";
status_want = get_status(status_num, 1);
status_state = get_status(status_num, 3);
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));
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;
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
return 0;
}
-static int check_deps(deb_file_t **deb_file, int deb_start, int dep_max_count)
+static int check_deps(deb_file_t **deb_file, int deb_start /*, int dep_max_count - ?? */)
{
int *conflicts = NULL;
int conflicts_num = 0;
return NULL;
}
- while ((line = xmalloc_getline(list_stream)) != NULL) {
+ while ((line = xmalloc_fgetline(list_stream)) != NULL) {
file_list = xrealloc(file_list, sizeof(char *) * (count + 2));
file_list[count] = line;
count++;
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
free_array(exclude_files);
/* rename <package>.conffile to <package>.list */
- rename(conffile_name, list_name);
+ xrename(conffile_name, list_name);
/* Change package status */
set_status(status_num, "config-files", 3);
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
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
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;
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"))
/* Check that the deb file arguments are installable */
if (!(opt & OPT_force_ignore_depends)) {
- if (!check_deps(deb_file, 0, deb_count)) {
+ if (!check_deps(deb_file, 0 /*, deb_count*/)) {
bb_error_msg_and_die("dependency check failed");
}
}