X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3d807132e4a24f61505af76f10c396204935599f..1179355dab021be45e57c675b2ef1ecaa0d9c805:/loadparm.c diff --git a/loadparm.c b/loadparm.c index 92b01488..f71a3bec 100644 --- a/loadparm.c +++ b/loadparm.c @@ -386,9 +386,16 @@ static void init_service(service *pservice) /** - * Assign a copy of @p v to @p *s, freeing any existing values and - * handling NULL strings. @p *v must be initialized when this is - * called, either to NULL or a malloc'd string. + * Assign a copy of @p v to @p *s. Handles NULL strings. @p *v must + * be initialized when this is called, either to NULL or a malloc'd + * string. + * + * @fixme There is a small leak here in that sometimes the existing + * value will be dynamically allocated, and the old copy is lost. + * However, we can't always deallocate the old value, because in the + * case of sDefault, it points to a static string. It would be nice + * to have either all-strdup'd values, or to never need to free + * memory. **/ static void string_set(char **s, const char *v) { @@ -396,8 +403,6 @@ static void string_set(char **s, const char *v) *s = NULL; return; } - if (*s) - free(*s); *s = strdup(v); if (!*s) exit_cleanup(RERR_MALLOC);