mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-05-20 20:42:12 +02:00
ghostutils: Clarify string ownership transfers
Rename the `tmp` variable to `name_owned` to make its purpose clearer, and more consistently assign to both it and `name` and `len` (which is the length of `name`) every time any of them are modified. This should make the function `const`-correct without the need for casts, and introduce no functional changes. Signed-off-by: Philip Withnall <pwithnall@gnome.org>
This commit is contained in:
parent
91b491241e
commit
e35aa61a55
@ -301,7 +301,8 @@ nameprep (const gchar *hostname,
|
|||||||
gssize len,
|
gssize len,
|
||||||
gboolean *is_unicode)
|
gboolean *is_unicode)
|
||||||
{
|
{
|
||||||
gchar *name, *tmp = NULL, *p;
|
const char *name, *p;
|
||||||
|
char *name_owned = NULL, *name_normalized = NULL;
|
||||||
|
|
||||||
/* It would be nice if we could do this without repeatedly
|
/* It would be nice if we could do this without repeatedly
|
||||||
* allocating strings and converting back and forth between
|
* allocating strings and converting back and forth between
|
||||||
@ -311,21 +312,20 @@ nameprep (const gchar *hostname,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Remove presentation-only characters */
|
/* Remove presentation-only characters */
|
||||||
name = remove_junk (hostname, len);
|
name = name_owned = remove_junk (hostname, len);
|
||||||
if (name)
|
if (name)
|
||||||
{
|
len = -1;
|
||||||
tmp = name;
|
|
||||||
len = -1;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
name = (gchar *)hostname;
|
name = hostname;
|
||||||
|
|
||||||
/* Convert to lowercase */
|
/* Convert to lowercase */
|
||||||
if (contains_uppercase_letters (name, len))
|
if (contains_uppercase_letters (name, len))
|
||||||
{
|
{
|
||||||
name = g_utf8_strdown (name, len);
|
char *name_owned_lower = NULL;
|
||||||
g_free (tmp);
|
|
||||||
tmp = name;
|
name = name_owned_lower = g_utf8_strdown (name, len);
|
||||||
|
g_free (name_owned);
|
||||||
|
name_owned = g_steal_pointer (&name_owned_lower);
|
||||||
len = -1;
|
len = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,18 +333,19 @@ nameprep (const gchar *hostname,
|
|||||||
if (!contains_non_ascii (name, len))
|
if (!contains_non_ascii (name, len))
|
||||||
{
|
{
|
||||||
*is_unicode = FALSE;
|
*is_unicode = FALSE;
|
||||||
if (name == (gchar *)hostname)
|
if (name == hostname)
|
||||||
return len == -1 ? g_strdup (hostname) : g_strndup (hostname, len);
|
return len == -1 ? g_strdup (hostname) : g_strndup (hostname, len);
|
||||||
else
|
else
|
||||||
return name;
|
return g_steal_pointer (&name_owned);
|
||||||
}
|
}
|
||||||
|
|
||||||
*is_unicode = TRUE;
|
*is_unicode = TRUE;
|
||||||
|
|
||||||
/* Normalize */
|
/* Normalize */
|
||||||
name = g_utf8_normalize (name, len, G_NORMALIZE_NFKC);
|
name = name_normalized = g_utf8_normalize (name, len, G_NORMALIZE_NFKC);
|
||||||
g_free (tmp);
|
g_free (name_owned);
|
||||||
tmp = name;
|
name_owned = g_steal_pointer (&name_normalized);
|
||||||
|
len = -1;
|
||||||
|
|
||||||
if (!name)
|
if (!name)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -356,11 +357,14 @@ nameprep (const gchar *hostname,
|
|||||||
* same as tolower(nfkc(X)), then we could skip the first tolower,
|
* same as tolower(nfkc(X)), then we could skip the first tolower,
|
||||||
* but I'm not sure it is.)
|
* but I'm not sure it is.)
|
||||||
*/
|
*/
|
||||||
if (contains_uppercase_letters (name, -1))
|
if (contains_uppercase_letters (name, len))
|
||||||
{
|
{
|
||||||
name = g_utf8_strdown (name, -1);
|
char *name_owned_lower = NULL;
|
||||||
g_free (tmp);
|
|
||||||
tmp = name;
|
name = name_owned_lower = g_utf8_strdown (name, len);
|
||||||
|
g_free (name_owned);
|
||||||
|
name_owned = g_steal_pointer (&name_owned_lower);
|
||||||
|
len = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check for prohibited characters */
|
/* Check for prohibited characters */
|
||||||
@ -369,7 +373,8 @@ nameprep (const gchar *hostname,
|
|||||||
if (idna_is_prohibited (g_utf8_get_char (p)))
|
if (idna_is_prohibited (g_utf8_get_char (p)))
|
||||||
{
|
{
|
||||||
name = NULL;
|
name = NULL;
|
||||||
g_free (tmp);
|
g_clear_pointer (&name_owned, g_free);
|
||||||
|
len = -1;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -379,7 +384,7 @@ nameprep (const gchar *hostname,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
done:
|
done:
|
||||||
return name;
|
return g_steal_pointer (&name_owned);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* RFC 3490, section 3.1 says '.', 0x3002, 0xFF0E, and 0xFF61 count as
|
/* RFC 3490, section 3.1 says '.', 0x3002, 0xFF0E, and 0xFF61 count as
|
||||||
|
Loading…
x
Reference in New Issue
Block a user