summaryrefslogtreecommitdiffstats
path: root/mbbsd
diff options
context:
space:
mode:
authorkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-02-25 02:56:28 +0800
committerkcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-02-25 02:56:28 +0800
commit4c93dcf3d3467422215b0313a89ca34c60122e03 (patch)
treee9acf90e6bfe70ca221b423eead81147aa88f0fb /mbbsd
parent9a5cafe88021647eb5eda706c64d3725bb7c43d1 (diff)
downloadpttbbs-4c93dcf3d3467422215b0313a89ca34c60122e03.tar
pttbbs-4c93dcf3d3467422215b0313a89ca34c60122e03.tar.gz
pttbbs-4c93dcf3d3467422215b0313a89ca34c60122e03.tar.bz2
pttbbs-4c93dcf3d3467422215b0313a89ca34c60122e03.tar.lz
pttbbs-4c93dcf3d3467422215b0313a89ca34c60122e03.tar.xz
pttbbs-4c93dcf3d3467422215b0313a89ca34c60122e03.tar.zst
pttbbs-4c93dcf3d3467422215b0313a89ca34c60122e03.zip
use only single malloc in initsetproctitle()
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2538 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd')
-rw-r--r--mbbsd/args.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/mbbsd/args.c b/mbbsd/args.c
index 32156517..8d6ee98d 100644
--- a/mbbsd/args.c
+++ b/mbbsd/args.c
@@ -18,15 +18,23 @@ void
initsetproctitle(int argc, char **argv, char **envp)
{
register int i;
+ int len=0,nenv=0;
/*
* Move the environment so setproctitle can use the space at the top of
* memory.
*/
- for (i = 0; envp[i]; i++);
- environ = malloc(sizeof(char *) * (i + 1));
for (i = 0; envp[i]; i++)
- environ[i] = strdup(envp[i]);
+ len+=strlen(envp[i])+1;
+ nenv=i+1;
+ len+=sizeof(char*)*nenv;
+ environ = malloc(len);
+ len=0;
+ for (i = 0; envp[i]; i++) {
+ environ[i] = (char*)environ+nenv*sizeof(char*)+len;
+ strcpy(environ[i], envp[i]);
+ len+=strlen(envp[i])+1;
+ }
environ[i] = NULL;
/* Save start and extent of argv for setproctitle. */