93 |
|
char *proctitle; |
94 |
|
#if (defined(FREEBSD) && !defined(FREEBSD5)) || defined(DFBSD) |
95 |
|
kvm_t *kvmd; |
96 |
< |
char **args; |
97 |
< |
int alloc; |
98 |
< |
char *proctitletmp; |
96 |
> |
char **args, **argsp; |
97 |
> |
int argslen = 0; |
98 |
|
#else |
99 |
|
long buflen; |
100 |
|
char *p; |
343 |
|
if(kvmd != NULL) { |
344 |
|
args = kvm_getargv(kvmd, &(kp_stats[i]), 0); |
345 |
|
if(args != NULL) { |
346 |
< |
alloc = 1; |
347 |
< |
proctitle = malloc(alloc); |
346 |
> |
argsp = args; |
347 |
> |
while(*argsp != NULL) { |
348 |
> |
argslen += strlen(*args); |
349 |
> |
args++; |
350 |
> |
} |
351 |
> |
proctitle = malloc(argslen + 1); |
352 |
> |
proctitle[0] = '\0'; |
353 |
|
if(proctitle == NULL) { |
354 |
|
return -1; |
355 |
|
} |
352 |
– |
proctitle[0] = '\0'; |
356 |
|
while(*args != NULL) { |
357 |
< |
if(strlen(proctitle) + strlen(*args) >= alloc) { |
358 |
< |
alloc = (alloc + strlen(*args)) * 2; |
356 |
< |
proctitletmp = realloc(proctitle, alloc); |
357 |
< |
if(proctitletmp == NULL) { |
358 |
< |
free(proctitle); |
359 |
< |
return -1; |
360 |
< |
} |
361 |
< |
proctitle = proctitletmp; |
362 |
< |
} |
363 |
< |
strlcat(proctitle, *args, alloc); |
364 |
< |
strlcat(proctitle, " ", alloc); |
357 |
> |
strlcat(proctitle, *args, argslen); |
358 |
> |
strlcat(proctitle, " ", argslen); |
359 |
|
args++; |
360 |
|
} |
361 |
|
/* remove trailing space */ |