More size shrinkage.
This commit is contained in:
parent
a6e131dab3
commit
1ec5b29054
134
archival/dpkg.c
134
archival/dpkg.c
@ -7,19 +7,7 @@
|
|||||||
*
|
*
|
||||||
* Started life as a busybox implementation of udpkg
|
* Started life as a busybox implementation of udpkg
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -556,7 +544,7 @@ static unsigned int fill_package_struct(char *control_buffer)
|
|||||||
"Conflicts", "Suggests", "Recommends", "Enhances", 0
|
"Conflicts", "Suggests", "Recommends", "Enhances", 0
|
||||||
};
|
};
|
||||||
|
|
||||||
common_node_t *new_node = (common_node_t *) xcalloc(1, sizeof(common_node_t));
|
common_node_t *new_node = (common_node_t *) xzalloc(sizeof(common_node_t));
|
||||||
char *field_name;
|
char *field_name;
|
||||||
char *field_value;
|
char *field_value;
|
||||||
int field_start = 0;
|
int field_start = 0;
|
||||||
@ -677,8 +665,7 @@ static void set_status(const unsigned int status_node_num, const char *new_value
|
|||||||
bb_error_msg_and_die("DEBUG ONLY: this shouldnt happen");
|
bb_error_msg_and_die("DEBUG ONLY: this shouldnt happen");
|
||||||
}
|
}
|
||||||
|
|
||||||
new_status = (char *) xmalloc(want_len + flag_len + status_len + 3);
|
new_status = bb_xasprintf("%s %s %s", name_hashtable[want], name_hashtable[flag], name_hashtable[status]);
|
||||||
sprintf(new_status, "%s %s %s", name_hashtable[want], name_hashtable[flag], name_hashtable[status]);
|
|
||||||
status_hashtable[status_node_num]->status = search_name_hashtable(new_status);
|
status_hashtable[status_node_num]->status = search_name_hashtable(new_status);
|
||||||
free(new_status);
|
free(new_status);
|
||||||
return;
|
return;
|
||||||
@ -741,79 +728,6 @@ static void index_status_file(const char *filename)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 /* this code is no longer used */
|
|
||||||
char *get_depends_field(common_node_t *package, const int depends_type)
|
|
||||||
{
|
|
||||||
char *depends = NULL;
|
|
||||||
char *old_sep = (char *)xcalloc(1, 3);
|
|
||||||
char *new_sep = (char *)xcalloc(1, 3);
|
|
||||||
int line_size = 0;
|
|
||||||
int depends_size;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < package->num_of_edges; i++) {
|
|
||||||
if ((package->edge[i]->type == EDGE_OR_PRE_DEPENDS) ||
|
|
||||||
(package->edge[i]->type == EDGE_OR_DEPENDS)) {
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((package->edge[i]->type == depends_type) ||
|
|
||||||
(package->edge[i]->type == depends_type + 1)) {
|
|
||||||
/* Check if its the first time through */
|
|
||||||
|
|
||||||
depends_size = 8 + strlen(name_hashtable[package->edge[i]->name])
|
|
||||||
+ strlen(name_hashtable[package->edge[i]->version]);
|
|
||||||
line_size += depends_size;
|
|
||||||
depends = (char *) xrealloc(depends, line_size + 1);
|
|
||||||
|
|
||||||
/* Check to see if this dependency is the type we are looking for
|
|
||||||
* +1 to check for 'extra' types, e.g. ored dependecies */
|
|
||||||
strcpy(old_sep, new_sep);
|
|
||||||
if (package->edge[i]->type == depends_type) {
|
|
||||||
strcpy(new_sep, ", ");
|
|
||||||
}
|
|
||||||
else if (package->edge[i]->type == depends_type + 1) {
|
|
||||||
strcpy(new_sep, "| ");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (depends_size == line_size) {
|
|
||||||
strcpy(depends, "");
|
|
||||||
} else {
|
|
||||||
if ((strcmp(old_sep, "| ") == 0) && (strcmp(new_sep, "| ") == 0)) {
|
|
||||||
strcat(depends, " | ");
|
|
||||||
} else {
|
|
||||||
strcat(depends, ", ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
strcat(depends, name_hashtable[package->edge[i]->name]);
|
|
||||||
if (strcmp(name_hashtable[package->edge[i]->version], "NULL") != 0) {
|
|
||||||
if (package->edge[i]->operator == VER_EQUAL) {
|
|
||||||
strcat(depends, " (= ");
|
|
||||||
}
|
|
||||||
else if (package->edge[i]->operator == VER_LESS) {
|
|
||||||
strcat(depends, " (<< ");
|
|
||||||
}
|
|
||||||
else if (package->edge[i]->operator == VER_LESS_EQUAL) {
|
|
||||||
strcat(depends, " (<= ");
|
|
||||||
}
|
|
||||||
else if (package->edge[i]->operator == VER_MORE) {
|
|
||||||
strcat(depends, " (>> ");
|
|
||||||
}
|
|
||||||
else if (package->edge[i]->operator == VER_MORE_EQUAL) {
|
|
||||||
strcat(depends, " (>= ");
|
|
||||||
} else {
|
|
||||||
strcat(depends, " (");
|
|
||||||
}
|
|
||||||
strcat(depends, name_hashtable[package->edge[i]->version]);
|
|
||||||
strcat(depends, ")");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(depends);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void write_buffer_no_status(FILE *new_status_file, const char *control_buffer)
|
static void write_buffer_no_status(FILE *new_status_file, const char *control_buffer)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
@ -1027,11 +941,9 @@ static int check_deps(deb_file_t **deb_file, int deb_start, int dep_max_count)
|
|||||||
package_hashtable[package_num]->edge[j]->operator);
|
package_hashtable[package_num]->edge[j]->operator);
|
||||||
if (package_hashtable[conflicts_package_num] == NULL) {
|
if (package_hashtable[conflicts_package_num] == NULL) {
|
||||||
/* create a new package */
|
/* create a new package */
|
||||||
common_node_t *new_node = (common_node_t *) xmalloc(sizeof(common_node_t));
|
common_node_t *new_node = (common_node_t *) xzalloc(sizeof(common_node_t));
|
||||||
new_node->name = package_hashtable[package_num]->edge[j]->name;
|
new_node->name = package_hashtable[package_num]->edge[j]->name;
|
||||||
new_node->version = package_hashtable[package_num]->edge[j]->version;
|
new_node->version = package_hashtable[package_num]->edge[j]->version;
|
||||||
new_node->num_of_edges = 0;
|
|
||||||
new_node->edge = NULL;
|
|
||||||
package_hashtable[conflicts_package_num] = new_node;
|
package_hashtable[conflicts_package_num] = new_node;
|
||||||
}
|
}
|
||||||
conflicts = xrealloc(conflicts, sizeof(int) * (conflicts_num + 1));
|
conflicts = xrealloc(conflicts, sizeof(int) * (conflicts_num + 1));
|
||||||
@ -1279,15 +1191,10 @@ static int run_package_script(const char *package_name, const char *script_type)
|
|||||||
char *script_path;
|
char *script_path;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
script_path = xmalloc(strlen(package_name) + strlen(script_type) + 21);
|
script_path = bb_xasprintf("/var/lib/dpkg/info/%s.%s", package_name, script_type);
|
||||||
sprintf(script_path, "/var/lib/dpkg/info/%s.%s", package_name, script_type);
|
|
||||||
|
|
||||||
/* If the file doesnt exist is isnt a fatal */
|
/* If the file doesnt exist is isnt a fatal */
|
||||||
if (lstat(script_path, &path_stat) < 0) {
|
result = lstat(script_path, &path_stat) < 0 ? EXIT_SUCCESS : system(script_path);
|
||||||
result = EXIT_SUCCESS;
|
|
||||||
} else {
|
|
||||||
result = system(script_path);
|
|
||||||
}
|
|
||||||
free(script_path);
|
free(script_path);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
@ -1301,13 +1208,11 @@ static char **all_control_list(const char *package_name)
|
|||||||
char **remove_files;
|
char **remove_files;
|
||||||
|
|
||||||
/* Create a list of all /var/lib/dpkg/info/<package> files */
|
/* Create a list of all /var/lib/dpkg/info/<package> files */
|
||||||
remove_files = xmalloc(sizeof(all_control_files));
|
remove_files = xzalloc(sizeof(all_control_files));
|
||||||
while (all_control_files[i]) {
|
while (all_control_files[i]) {
|
||||||
remove_files[i] = xmalloc(strlen(package_name) + strlen(all_control_files[i]) + 21);
|
remove_files[i] = bb_xasprintf("/var/lib/dpkg/info/%s.%s", package_name, all_control_files[i]);
|
||||||
sprintf(remove_files[i], "/var/lib/dpkg/info/%s.%s", package_name, all_control_files[i]);
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
remove_files[sizeof(all_control_files)/sizeof(char*) - 1] = NULL;
|
|
||||||
|
|
||||||
return(remove_files);
|
return(remove_files);
|
||||||
}
|
}
|
||||||
@ -1400,11 +1305,9 @@ static void remove_package(const unsigned int package_num, int noisy)
|
|||||||
free_array(remove_files);
|
free_array(remove_files);
|
||||||
|
|
||||||
/* Create a list of files in /var/lib/dpkg/info/<package>.* to keep */
|
/* Create a list of files in /var/lib/dpkg/info/<package>.* to keep */
|
||||||
exclude_files = xmalloc(sizeof(char*) * 3);
|
exclude_files = xzalloc(sizeof(char*) * 3);
|
||||||
exclude_files[0] = bb_xstrdup(conffile_name);
|
exclude_files[0] = bb_xstrdup(conffile_name);
|
||||||
exclude_files[1] = xmalloc(package_name_length + 27);
|
exclude_files[1] = bb_xasprintf("/var/lib/dpkg/info/%s.postrm", package_name);
|
||||||
sprintf(exclude_files[1], "/var/lib/dpkg/info/%s.postrm", package_name);
|
|
||||||
exclude_files[2] = NULL;
|
|
||||||
|
|
||||||
/* Create a list of all /var/lib/dpkg/info/<package> files */
|
/* Create a list of all /var/lib/dpkg/info/<package> files */
|
||||||
remove_files = all_control_list(package_name);
|
remove_files = all_control_list(package_name);
|
||||||
@ -1440,8 +1343,7 @@ static void purge_package(const unsigned int package_num)
|
|||||||
sprintf(list_name, "/var/lib/dpkg/info/%s.list", package_name);
|
sprintf(list_name, "/var/lib/dpkg/info/%s.list", package_name);
|
||||||
remove_files = create_list(list_name);
|
remove_files = create_list(list_name);
|
||||||
|
|
||||||
exclude_files = xmalloc(sizeof(char*));
|
exclude_files = xzalloc(sizeof(char*));
|
||||||
exclude_files[0] = NULL;
|
|
||||||
|
|
||||||
/* Some directories cant be removed straight away, so do multiple passes */
|
/* Some directories cant be removed straight away, so do multiple passes */
|
||||||
while (remove_file_array(remove_files, exclude_files));
|
while (remove_file_array(remove_files, exclude_files));
|
||||||
@ -1536,9 +1438,7 @@ static void data_extract_all_prefix(archive_handle_t *archive_handle)
|
|||||||
|
|
||||||
name_ptr += strspn(name_ptr, "./");
|
name_ptr += strspn(name_ptr, "./");
|
||||||
if (name_ptr[0] != '\0') {
|
if (name_ptr[0] != '\0') {
|
||||||
archive_handle->file_header->name = xmalloc(strlen(archive_handle->buffer) + 2 + strlen(name_ptr));
|
archive_handle->file_header->name = bb_xasprintf("%s%s", archive_handle->buffer, name_ptr);
|
||||||
strcpy(archive_handle->file_header->name, archive_handle->buffer);
|
|
||||||
strcat(archive_handle->file_header->name, name_ptr);
|
|
||||||
data_extract_all(archive_handle);
|
data_extract_all(archive_handle);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -1567,14 +1467,12 @@ static void unpack_package(deb_file_t *deb_file)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Extract control.tar.gz to /var/lib/dpkg/info/<package>.filename */
|
/* Extract control.tar.gz to /var/lib/dpkg/info/<package>.filename */
|
||||||
info_prefix = (char *) xmalloc(strlen(package_name) + 20 + 4 + 2);
|
info_prefix = bb_xasprintf("/var/lib/dpkg/info/%s.", package_name);
|
||||||
sprintf(info_prefix, "/var/lib/dpkg/info/%s.", package_name);
|
|
||||||
archive_handle = init_archive_deb_ar(deb_file->filename);
|
archive_handle = init_archive_deb_ar(deb_file->filename);
|
||||||
init_archive_deb_control(archive_handle);
|
init_archive_deb_control(archive_handle);
|
||||||
|
|
||||||
while(all_control_files[i]) {
|
while(all_control_files[i]) {
|
||||||
char *c = (char *) xmalloc(3 + strlen(all_control_files[i]));
|
char *c = bb_xasprintf("./%s", all_control_files[i]);
|
||||||
sprintf(c, "./%s", all_control_files[i]);
|
|
||||||
llist_add_to(&accept_list, c);
|
llist_add_to(&accept_list, c);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@ -1699,7 +1597,7 @@ int dpkg_main(int argc, char **argv)
|
|||||||
while (optind < argc) {
|
while (optind < argc) {
|
||||||
/* deb_count = nb_elem - 1 and we need nb_elem + 1 to allocate terminal node [NULL pointer] */
|
/* deb_count = nb_elem - 1 and we need nb_elem + 1 to allocate terminal node [NULL pointer] */
|
||||||
deb_file = xrealloc(deb_file, sizeof(deb_file_t *) * (deb_count + 2));
|
deb_file = xrealloc(deb_file, sizeof(deb_file_t *) * (deb_count + 2));
|
||||||
deb_file[deb_count] = (deb_file_t *) xmalloc(sizeof(deb_file_t));
|
deb_file[deb_count] = (deb_file_t *) xzalloc(sizeof(deb_file_t));
|
||||||
if (dpkg_opt & dpkg_opt_filename) {
|
if (dpkg_opt & dpkg_opt_filename) {
|
||||||
archive_handle_t *archive_handle;
|
archive_handle_t *archive_handle;
|
||||||
llist_t *control_list = NULL;
|
llist_t *control_list = NULL;
|
||||||
@ -1742,8 +1640,6 @@ int dpkg_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (dpkg_opt & dpkg_opt_package_name) {
|
else if (dpkg_opt & dpkg_opt_package_name) {
|
||||||
deb_file[deb_count]->filename = NULL;
|
|
||||||
deb_file[deb_count]->control_file = NULL;
|
|
||||||
deb_file[deb_count]->package = search_package_hashtable(
|
deb_file[deb_count]->package = search_package_hashtable(
|
||||||
search_name_hashtable(argv[optind]),
|
search_name_hashtable(argv[optind]),
|
||||||
search_name_hashtable("ANY"), VER_ANY);
|
search_name_hashtable("ANY"), VER_ANY);
|
||||||
|
@ -16,11 +16,7 @@
|
|||||||
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* These defines are very important for BusyBox. Without these,
|
|
||||||
* huge chunks of ram are pre-allocated making the BusyBox bss
|
|
||||||
* size Freaking Huge(tm), which is a bad thing.*/
|
|
||||||
#define SMALL_MEM
|
#define SMALL_MEM
|
||||||
#define DYN_ALLOC
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -87,17 +83,11 @@ typedef unsigned long ulg;
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DYN_ALLOC
|
|
||||||
# define DECLARE(type, array, size) static type * array
|
# define DECLARE(type, array, size) static type * array
|
||||||
# define ALLOC(type, array, size) { \
|
# define ALLOC(type, array, size) { \
|
||||||
array = (type*)xcalloc((size_t)(((size)+1L)/2), 2*sizeof(type)); \
|
array = (type*)xzalloc((size_t)(((size)+1L)/2) * 2*sizeof(type)); \
|
||||||
}
|
}
|
||||||
# define FREE(array) {free(array), array=NULL;}
|
# define FREE(array) {free(array), array=NULL;}
|
||||||
#else
|
|
||||||
# define DECLARE(type, array, size) static type array[size]
|
|
||||||
# define ALLOC(type, array, size)
|
|
||||||
# define FREE(array)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define tab_suffix window
|
#define tab_suffix window
|
||||||
#define tab_prefix prev /* hash link (see deflate.c) */
|
#define tab_prefix prev /* hash link (see deflate.c) */
|
||||||
|
@ -1,17 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* Copyright 2002 Glenn McGrath
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
@ -21,8 +11,7 @@ void data_extract_to_buffer(archive_handle_t *archive_handle)
|
|||||||
{
|
{
|
||||||
const unsigned int size = archive_handle->file_header->size;
|
const unsigned int size = archive_handle->file_header->size;
|
||||||
|
|
||||||
archive_handle->buffer = xmalloc(size + 1);
|
archive_handle->buffer = xzalloc(size + 1);
|
||||||
|
|
||||||
archive_xread_all(archive_handle, archive_handle->buffer, size);
|
archive_xread_all(archive_handle, archive_handle->buffer, size);
|
||||||
archive_handle->buffer[size] = '\0';
|
|
||||||
}
|
}
|
||||||
|
@ -644,8 +644,7 @@ static int start_bunzip(bunzip_data **bdp, int in_fd, unsigned char *inbuf,
|
|||||||
|
|
||||||
/* Allocate bunzip_data. Most fields initialize to zero. */
|
/* Allocate bunzip_data. Most fields initialize to zero. */
|
||||||
|
|
||||||
bd=*bdp=xmalloc(i);
|
bd=*bdp=xzalloc(i);
|
||||||
memset(bd,0,sizeof(bunzip_data));
|
|
||||||
|
|
||||||
/* Setup input buffer */
|
/* Setup input buffer */
|
||||||
|
|
||||||
|
@ -1,17 +1,6 @@
|
|||||||
/*
|
/* Copyright 2001 Glenn McGrath.
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -1,17 +1,6 @@
|
|||||||
/*
|
/* Copyright 2002 Laurence Anderson
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -85,9 +74,8 @@ char get_header_cpio(archive_handle_t *archive_handle)
|
|||||||
file_header->size = tmpsize;
|
file_header->size = tmpsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
file_header->name = (char *) xmalloc(namesize + 1);
|
file_header->name = (char *) xzalloc(namesize + 1);
|
||||||
archive_xread_all(archive_handle, file_header->name, namesize); /* Read in filename */
|
archive_xread_all(archive_handle, file_header->name, namesize); /* Read in filename */
|
||||||
file_header->name[namesize] = '\0';
|
|
||||||
archive_handle->offset += namesize;
|
archive_handle->offset += namesize;
|
||||||
|
|
||||||
/* Update offset amount and skip padding before file contents */
|
/* Update offset amount and skip padding before file contents */
|
||||||
@ -113,9 +101,8 @@ char get_header_cpio(archive_handle_t *archive_handle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (S_ISLNK(file_header->mode)) {
|
if (S_ISLNK(file_header->mode)) {
|
||||||
file_header->link_name = (char *) xmalloc(file_header->size + 1);
|
file_header->link_name = (char *) xzalloc(file_header->size + 1);
|
||||||
archive_xread_all(archive_handle, file_header->link_name, file_header->size);
|
archive_xread_all(archive_handle, file_header->link_name, file_header->size);
|
||||||
file_header->link_name[file_header->size] = '\0';
|
|
||||||
archive_handle->offset += file_header->size;
|
archive_handle->offset += file_header->size;
|
||||||
file_header->size = 0; /* Stop possible seeks in future */
|
file_header->size = 0; /* Stop possible seeks in future */
|
||||||
} else {
|
} else {
|
||||||
|
@ -168,17 +168,15 @@ char get_header_tar(archive_handle_t *archive_handle)
|
|||||||
break;
|
break;
|
||||||
#ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS
|
#ifdef CONFIG_FEATURE_TAR_GNU_EXTENSIONS
|
||||||
case 'L': {
|
case 'L': {
|
||||||
longname = xmalloc(file_header->size + 1);
|
longname = xzalloc(file_header->size + 1);
|
||||||
archive_xread_all(archive_handle, longname, file_header->size);
|
archive_xread_all(archive_handle, longname, file_header->size);
|
||||||
longname[file_header->size] = '\0';
|
|
||||||
archive_handle->offset += file_header->size;
|
archive_handle->offset += file_header->size;
|
||||||
|
|
||||||
return(get_header_tar(archive_handle));
|
return(get_header_tar(archive_handle));
|
||||||
}
|
}
|
||||||
case 'K': {
|
case 'K': {
|
||||||
linkname = xmalloc(file_header->size + 1);
|
linkname = xzalloc(file_header->size + 1);
|
||||||
archive_xread_all(archive_handle, linkname, file_header->size);
|
archive_xread_all(archive_handle, linkname, file_header->size);
|
||||||
linkname[file_header->size] = '\0';
|
|
||||||
archive_handle->offset += file_header->size;
|
archive_handle->offset += file_header->size;
|
||||||
|
|
||||||
file_header->name = linkname;
|
file_header->name = linkname;
|
||||||
|
@ -36,12 +36,12 @@ static void rc_read(rc_t * rc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Called once */
|
/* Called once */
|
||||||
static ATTRIBUTE_ALWAYS_INLINE void rc_init(rc_t * rc, int fd, int buffer_size)
|
static void rc_init(rc_t * rc, int fd, int buffer_size)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
rc->fd = fd;
|
rc->fd = fd;
|
||||||
rc->buffer = malloc(buffer_size);
|
rc->buffer = xmalloc(buffer_size);
|
||||||
rc->buffer_size = buffer_size;
|
rc->buffer_size = buffer_size;
|
||||||
rc->buffer_end = rc->buffer + rc->buffer_size;
|
rc->buffer_end = rc->buffer + rc->buffer_size;
|
||||||
rc->ptr = rc->buffer_end;
|
rc->ptr = rc->buffer_end;
|
||||||
|
@ -208,7 +208,7 @@ void extract_cpio_gz(int fd) {
|
|||||||
|
|
||||||
rpm_index **rpm_gettags(int fd, int *num_tags)
|
rpm_index **rpm_gettags(int fd, int *num_tags)
|
||||||
{
|
{
|
||||||
rpm_index **tags = calloc(200, sizeof(struct rpmtag *)); /* We should never need mode than 200, and realloc later */
|
rpm_index **tags = xzalloc(200 * sizeof(struct rpmtag *)); /* We should never need mode than 200, and realloc later */
|
||||||
int pass, tagindex = 0;
|
int pass, tagindex = 0;
|
||||||
lseek(fd, 96, SEEK_CUR); /* Seek past the unused lead */
|
lseek(fd, 96, SEEK_CUR); /* Seek past the unused lead */
|
||||||
|
|
||||||
@ -327,13 +327,10 @@ void fileaction_list(char *filename, int ATTRIBUTE_UNUSED fileref)
|
|||||||
void loop_through_files(int filetag, void (*fileaction)(char *filename, int fileref))
|
void loop_through_files(int filetag, void (*fileaction)(char *filename, int fileref))
|
||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
char *filename, *tmp_dirname, *tmp_basename;
|
|
||||||
while (rpm_getstring(filetag, count)) {
|
while (rpm_getstring(filetag, count)) {
|
||||||
tmp_dirname = rpm_getstring(RPMTAG_DIRNAMES, rpm_getint(RPMTAG_DIRINDEXES, count)); /* 1st put on the directory */
|
char * filename = bb_xasprintf("%s%s",
|
||||||
tmp_basename = rpm_getstring(RPMTAG_BASENAMES, count);
|
rpm_getstring(RPMTAG_DIRNAMES, rpm_getint(RPMTAG_DIRINDEXES,
|
||||||
filename = xmalloc(strlen(tmp_basename) + strlen(tmp_dirname) + 1);
|
count)), rpm_getstring(RPMTAG_BASENAMES, count));
|
||||||
strcpy(filename, tmp_dirname); /* First the directory name */
|
|
||||||
strcat(filename, tmp_basename); /* then the filename */
|
|
||||||
fileaction(filename, count++);
|
fileaction(filename, count++);
|
||||||
free(filename);
|
free(filename);
|
||||||
}
|
}
|
||||||
|
@ -275,9 +275,8 @@ int unzip_main(int argc, char **argv)
|
|||||||
|
|
||||||
/* Read filename */
|
/* Read filename */
|
||||||
free(dst_fn);
|
free(dst_fn);
|
||||||
dst_fn = xmalloc(zip_header.formated.filename_len + 1);
|
dst_fn = xzalloc(zip_header.formated.filename_len + 1);
|
||||||
unzip_read(src_fd, dst_fn, zip_header.formated.filename_len);
|
unzip_read(src_fd, dst_fn, zip_header.formated.filename_len);
|
||||||
dst_fn[zip_header.formated.filename_len] = 0;
|
|
||||||
|
|
||||||
/* Skip extra header bytes */
|
/* Skip extra header bytes */
|
||||||
unzip_skip(src_fd, zip_header.formated.extra_len);
|
unzip_skip(src_fd, zip_header.formated.extra_len);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
* Simple telnet server
|
* Simple telnet server
|
||||||
* Bjorn Wesen, Axis Communications AB (bjornw@axis.com)
|
* Bjorn Wesen, Axis Communications AB (bjornw@axis.com)
|
||||||
*
|
*
|
||||||
* Licensed under GPL, see file LICENSE in this tarball for details.
|
* Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
|
||||||
*
|
*
|
||||||
* ---------------------------------------------------------------------------
|
* ---------------------------------------------------------------------------
|
||||||
* (C) Copyright 2000, Axis Communications AB, LUND, SWEDEN
|
* (C) Copyright 2000, Axis Communications AB, LUND, SWEDEN
|
||||||
@ -260,21 +260,17 @@ make_new_session(int sockfd)
|
|||||||
struct termios termbuf;
|
struct termios termbuf;
|
||||||
int pty, pid;
|
int pty, pid;
|
||||||
char tty_name[32];
|
char tty_name[32];
|
||||||
struct tsession *ts = malloc(sizeof(struct tsession) + BUFSIZE * 2);
|
struct tsession *ts = xzalloc(sizeof(struct tsession) + BUFSIZE * 2);
|
||||||
|
|
||||||
ts->buf1 = (char *)(&ts[1]);
|
ts->buf1 = (char *)(&ts[1]);
|
||||||
ts->buf2 = ts->buf1 + BUFSIZE;
|
ts->buf2 = ts->buf1 + BUFSIZE;
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_TELNETD_INETD
|
#ifdef CONFIG_FEATURE_TELNETD_INETD
|
||||||
ts->sockfd_read = 0;
|
|
||||||
ts->sockfd_write = 1;
|
ts->sockfd_write = 1;
|
||||||
#else /* CONFIG_FEATURE_TELNETD_INETD */
|
#else /* CONFIG_FEATURE_TELNETD_INETD */
|
||||||
ts->sockfd = sockfd;
|
ts->sockfd = sockfd;
|
||||||
#endif /* CONFIG_FEATURE_TELNETD_INETD */
|
#endif /* CONFIG_FEATURE_TELNETD_INETD */
|
||||||
|
|
||||||
ts->rdidx1 = ts->wridx1 = ts->size1 = 0;
|
|
||||||
ts->rdidx2 = ts->wridx2 = ts->size2 = 0;
|
|
||||||
|
|
||||||
/* Got a new connection, set up a tty and spawn a shell. */
|
/* Got a new connection, set up a tty and spawn a shell. */
|
||||||
|
|
||||||
pty = getpty(tty_name);
|
pty = getpty(tty_name);
|
||||||
|
Loading…
Reference in New Issue
Block a user