ons 2002-08-28 klockan 16.45 skrev Tollef Fog Heen: > * Colin Walters > > | I guess this is up to Mithrandir...what do you think? > > I'd say go ahead. I attached a patch for using asprintf in anna, main-menu, choose-mirror, wget-retriever and udpkg. udpkg's makefile.in also adds -D_GNU_SOURCE. Not checking it in configure is suboptimal, yes, but I can't summon up enough courage to work with autotools right now. Regards, Martin
Index: anna/anna.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/anna/anna.c,v
retrieving revision 1.12
diff -u -r1.12 anna.c
--- anna/anna.c 27 May 2002 14:08:45 -0000 1.12
+++ anna/anna.c 28 Aug 2002 16:53:15 -0000
@@ -46,9 +46,9 @@
/* Calls udpkg to unpack a package. */
int unpack_package (char *pkgfile) {
- char *command=malloc(strlen(DPKG_UNPACK_COMMAND) + 1 +
- strlen(pkgfile) + 1);
- sprintf(command, "%s %s", DPKG_UNPACK_COMMAND, pkgfile);
+ char *command;
+
+ asprintf(&command, "%s %s", DPKG_UNPACK_COMMAND, pkgfile);
return ! system(command);
}
@@ -98,9 +98,7 @@
for(f = fp = p->filename; *fp != 0; fp++)
if (*fp == '/')
f = ++fp;
- dest_file=malloc(strlen(DOWNLOAD_DIR) + 1 +
- strlen(f) + 1);
- sprintf(dest_file, "%s/%s", DOWNLOAD_DIR, f);
+ asprintf(&dest_file, "%s/%s", DOWNLOAD_DIR, f);
if (! get_package(p, dest_file)) {
fprintf(stderr, "anna: error getting %s!\n",
Index: anna/retriever.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/anna/retriever.c,v
retrieving revision 1.12
diff -u -r1.12 retriever.c
--- anna/retriever.c 28 Aug 2002 07:24:49 -0000 1.12
+++ anna/retriever.c 28 Aug 2002 16:53:15 -0000
@@ -81,9 +81,9 @@
int get_package (struct package_t *package, char *dest) {
int ret;
char *retriever=chosen_retriever();
- char *command=malloc(strlen(retriever) + 1 + strlen(package->filename) +
- 1 + strlen(dest) + 1);
- sprintf(command, "%s %s %s", retriever, package->filename, dest);
+ char *command;
+
+ asprintf(&command, "%s %s %s", retriever, package->filename, dest);
ret=! system(command);
free(command);
return ret;
@@ -108,11 +108,10 @@
int currsuite = 0;
suite = suites[currsuite];
while (suite != NULL) {
- char *command=malloc(strlen(retriever) + 10 +
- sizeof(tmp_packages) + 1 + strlen(suite));
+ char *command;
unlink(tmp_packages);
- sprintf(command, "%s Packages %s %s", retriever, tmp_packages,
+ asprintf(&command, "%s Packages %s %s", retriever, tmp_packages,
suite);
fprintf(stderr,"%s\n", command);
if (system(command) != 0) {
Index: main-menu/main-menu.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/main-menu/main-menu.c,v
retrieving revision 1.30
diff -u -r1.30 main-menu.c
--- main-menu/main-menu.c 27 May 2002 14:12:56 -0000 1.30
+++ main-menu/main-menu.c 28 Aug 2002 16:53:16 -0000
@@ -85,16 +85,21 @@
/* Returns true if the given package could be the default menu item. */
int isdefault(struct package_t *p) {
- char menutest[1024];
+ char *menutest;
struct stat statbuf;
+ int ret;
- sprintf(menutest, DPKGDIR "info/%s.menutest", p->package);
+ asprintf(&menutest, DPKGDIR "info/%s.menutest", p->package);
if (stat(menutest, &statbuf) == 0) {
- return ! SYSTEM(menutest);
+ ret = SYSTEM(menutest);
+ free(menutest);
+ return !ret;
}
else if (p->status == unpacked || p->status == half_configured) {
+ free(menutest);
return 1;
}
+ free(menutest);
return 0;
}
@@ -206,13 +211,16 @@
}
int do_menu_item(struct package_t *p) {
- char configcommand[1024];
+ char *configcommand;
struct package_t *head = NULL, *tail = NULL;
+ int ret;
if (p->status == installed) {
/* The menu item is already configured, so reconfigure it. */
- sprintf(configcommand, "dpkg-reconfigure %s", p->package);
- return ! SYSTEM(configcommand);
+ asprintf(&configcommand, "dpkg-reconfigure %s", p->package);
+ ret = SYSTEM(configcommand);
+ free(configcommand);
+ return !ret;
}
else if (p->status == unpacked || p->status == half_configured) {
/*
@@ -223,8 +231,10 @@
order_done(head);
for (p = head; p; p = p->next) {
if (p->status == unpacked || p->status == half_configured) {
- sprintf(configcommand, DPKG_CONFIGURE_COMMAND " %s", p->package);
- if (SYSTEM(configcommand) != 0)
+ asprintf(&configcommand, DPKG_CONFIGURE_COMMAND " %s", p->package);
+ ret = SYSTEM(configcommand);
+ free(configcommand);
+ if (ret != 0)
return 0; /* give up on failure */
}
}
Index: retriever/choose-mirror/choose-mirror.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/retriever/choose-mirror/choose-mirror.c,v
retrieving revision 1.10
diff -u -r1.10 choose-mirror.c
--- retriever/choose-mirror/choose-mirror.c 13 Aug 2002 16:00:22 -0000 1.10
+++ retriever/choose-mirror/choose-mirror.c 28 Aug 2002 16:53:16 -0000
@@ -31,9 +31,7 @@
debconf->command(debconf, "GET", DEBCONF_BASE "protocol", NULL);
protocol = strdup(debconf->value);
- ret = malloc(strlen(DEBCONF_BASE) + strlen(protocol) + strlen(string) + 2);
- /* +2 since we need one for the slash and one for the terminating NULL */
- sprintf(ret,"%s%s/%s",DEBCONF_BASE,protocol,string);
+ asprintf(&ret,"%s%s/%s",DEBCONF_BASE,protocol,string);
free(protocol);
return ret;
}
Index: retriever/wget/wget-retriever.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/retriever/wget/wget-retriever.c,v
retrieving revision 1.16
diff -u -r1.16 wget-retriever.c
--- retriever/wget/wget-retriever.c 13 Aug 2002 16:07:04 -0000 1.16
+++ retriever/wget/wget-retriever.c 28 Aug 2002 16:53:16 -0000
@@ -44,28 +44,15 @@
if (strcmp(src, "Packages") == 0) {
if (argc == 4) {
/* third argument is which suite we want */
- src = malloc(strlen("dists/") + strlen(distribution)
- + 1 /* / */ +
- + strlen(argv[3]) +
- strlen("/debian-installer/binary-"
- ARCH "/Packages") + 1);
- sprintf(src,"dists/%s/%s/debian-installer/binary-"
- ARCH "/Packages", distribution, argv[3]);
+ asprintf(&src,"dists/%s/%s/debian-installer/binary-"
+ ARCH "/Packages", distribution, argv[3]);
} else {
- src = malloc(strlen("dists/") + strlen(distribution)
- + 1 /* / */ +
- + strlen("main") +
- strlen("/debian-installer/binary-"
- ARCH "/Packages") + 1);
- sprintf(src,"dists/%s/main/debian-installer/binary-"
- ARCH "/Packages", distribution);
+ asprintf(&src,"dists/%s/main/debian-installer/binary-"
+ ARCH "/Packages", distribution);
}
}
- command=malloc( 18 /* wget -c -q http:// */ + strlen(hostname) +
- strlen(directory) + 1 /* / */ + strlen(src) +
- 4 /* -O */ + strlen(argv[2]) + 1);
- sprintf(command, "wget -c -q http://%s%s/%s -O %s", hostname,
+ asprintf(&command, "wget -c -q http://%s%s/%s -O %s", hostname,
directory, src, argv[2]);
fprintf(stderr,"wget: %s\n", command);
ret=system(command);
Index: tools/udpkg/makefile.in
===================================================================
RCS file: /cvs/debian-boot/debian-installer/tools/udpkg/makefile.in,v
retrieving revision 1.7
diff -u -r1.7 makefile.in
--- tools/udpkg/makefile.in 2 May 2002 06:29:41 -0000 1.7
+++ tools/udpkg/makefile.in 28 Aug 2002 16:53:16 -0000
@@ -1,5 +1,5 @@
CC=@CC@
-CFLAGS=@CFLAGS@ -DADMINDIR=\"@ADMINDIR@\"
+CFLAGS=@CFLAGS@ -D_GNU_SOURCE -DADMINDIR=\"@ADMINDIR@\"
OBJS=$(subst .c,.o,$(wildcard *.c))
BIN=udpkg
BUSYBOX=@BUSYBOXDIR@
Index: tools/udpkg/udpkg.c
===================================================================
RCS file: /cvs/debian-boot/debian-installer/tools/udpkg/udpkg.c,v
retrieving revision 1.26
diff -u -r1.26 udpkg.c
--- tools/udpkg/udpkg.c 1 Aug 2002 09:12:50 -0000 1.26
+++ tools/udpkg/udpkg.c 28 Aug 2002 16:53:17 -0000
@@ -371,8 +371,7 @@
p->file = *argv;
else if (opt != 'c')
{
- p->file = malloc(strlen(cwd) + strlen(*argv) + 2);
- sprintf(p->file, "%s/%s", cwd, *argv);
+ asprintf(&p->file, "%s/%s", cwd, *argv);
}
else {
p->package = strdup(*argv);
Attachment:
signature.asc
Description: Detta =?ISO-8859-1?Q?=E4r?= en digitalt signerad meddelandedel