diff --git a/src/daemon/slave.c b/src/daemon/slave.c index 2ed009b5..6681eaf9 100644 --- a/src/daemon/slave.c +++ b/src/daemon/slave.c @@ -88,7 +88,8 @@ handle_slave_connection (int input, int output) &resp->u.data.proc_args, pid, max_len); do_output (output, resp, _offset_data (proc_args), - resp->u.data.proc_args.size, ptr); + ptr ? resp->u.data.proc_args.size+1 : 0, + ptr); glibtop_free_r (server, ptr); break; #endif diff --git a/sysdeps/freebsd/procargs.c b/sysdeps/freebsd/procargs.c index 8312e474..553e48d1 100644 --- a/sysdeps/freebsd/procargs.c +++ b/sysdeps/freebsd/procargs.c @@ -49,7 +49,7 @@ glibtop_get_proc_args_p (glibtop *server, glibtop_proc_args *buf, { struct kinfo_proc *pinfo; char *retval, **args, **ptr; - unsigned size = 0; + unsigned size = 0, pos = 0; int count; char filename [BUFSIZ]; @@ -87,16 +87,18 @@ glibtop_get_proc_args_p (glibtop *server, glibtop_proc_args *buf, for (ptr = args; *ptr; ptr++) size += strlen (*ptr)+1; - buf->size = size+2; - - retval = glibtop_malloc_r (server, buf->size); - memset (retval, 0, buf->size); + size += 2; + retval = glibtop_malloc_r (server, size); + memset (retval, 0, size); for (ptr = args; *ptr; ptr++) { - if (*retval) strcat (retval, " "); - strcat (retval, *ptr); + int len = strlen (*ptr)+1; + memcpy (retval+pos, *ptr, len); + pos += len; } + buf->size = pos ? pos-1 : 0; + buf->flags = _glibtop_sysdeps_proc_args; return retval;