diff --git a/bin/rcp/extern.h b/bin/rcp/extern.h index a07c3a6730e9..ebd2bebe1034 100644 --- a/bin/rcp/extern.h +++ b/bin/rcp/extern.h @@ -35,7 +35,7 @@ */ typedef struct { - int cnt; + size_t cnt; char *buf; } BUF; diff --git a/bin/rcp/rcp.c b/bin/rcp/rcp.c index 8f0a01d4c62c..b34506df2205 100644 --- a/bin/rcp/rcp.c +++ b/bin/rcp/rcp.c @@ -670,14 +670,17 @@ sink(int argc, char *argv[]) if (*cp++ != ' ') SCREWUP("size not delimited"); if (targisdir) { - static char *namebuf; - static int cursize; + static char *namebuf = NULL; + static size_t cursize; size_t need; need = strlen(targ) + strlen(cp) + 250; if (need > cursize) { + if (namebuf != NULL) + free(namebuf); if (!(namebuf = malloc(need))) run_err("%s", strerror(errno)); + cursize = need; } (void)snprintf(namebuf, need, "%s%s%s", targ, *targ ? "/" : "", cp);