From c31e00b52d49632dd0f005269ab2b820c7fd2c34 Mon Sep 17 00:00:00 2001 From: Saint Xavier Date: Mon, 21 Jul 2008 19:34:22 +0200 Subject: [PATCH] Do not free/duplicate current/remote encoding string if they aren't changed --- src/iri.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/iri.c b/src/iri.c index c28d4f51..d23615ae 100644 --- a/src/iri.c +++ b/src/iri.c @@ -337,18 +337,27 @@ void set_current_charset (char *charset) { /*printf("[ current = `%s'\n", charset);*/ if (current) - xfree (current); + { + /* Do nothing if already equal */ + if (!strcasecmp (current, charset)) + return; + xfree (current); + } current = charset ? xstrdup (charset) : NULL; } void set_current_as_locale (void) { + /* sXXXav : assert opt.locale NULL ? */ /*printf("[ current = locale = `%s'\n", opt.locale);*/ if (current) - xfree (current); + { + if (!strcasecmp (current, opt.locale)) + return; + xfree (current); + } - /* sXXXav : assert opt.locale NULL ? */ current = xstrdup (opt.locale); } @@ -357,8 +366,12 @@ set_remote_charset (char *charset) { /*printf("[ remote = `%s'\n", charset);*/ if (remote) - xfree (remote); - + { + /* Do nothing if already equal */ + if (!strcasecmp (remote, charset)) + return; + xfree (remote); + } remote = charset ? xstrdup (charset) : NULL; } @@ -367,7 +380,12 @@ set_remote_as_current (void) { /*printf("[ remote = current = `%s'\n", current);*/ if (remote) - xfree (remote); + { + /* Do nothing if already equal */ + if (current && !strcasecmp (remote, current)) + return; + xfree (remote); + } remote = current ? xstrdup (current) : NULL; }