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