Change the return type of freelocale(3) to void.

Our version of this function currently returns an integer indicating
failure or success, whereas POSIX specifies that this function has no
return value. It returns void. Patch up the header, sources and man page
to use the right type. While there, use the opportunity to simplify the
body of this function.

Theoretically speaking, this change breaks the ABI of this function.
That said, I have yet to find any code that makes use of freelocale()'s
return value. I couldn't find any of it in the base system, nor did an
exp-run reveal any breakage caused by this change.

PR:		211394 (exp-run)
This commit is contained in:
ed 2016-07-29 17:18:47 +00:00
parent 2073003786
commit 6e39e4860b
3 changed files with 15 additions and 26 deletions

View File

@ -48,7 +48,7 @@ typedef struct _xlocale *locale_t;
#endif
locale_t duplocale(locale_t base);
int freelocale(locale_t loc);
void freelocale(locale_t loc);
locale_t newlocale(int mask, const char *locale, locale_t base);
const char *querylocale(int mask, locale_t loc);
locale_t uselocale(locale_t loc);

View File

@ -26,7 +26,7 @@
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.Dd September 17, 2011
.Dd July 26, 2016
.Dt FREELOCALE 3
.Os
.Sh NAME
@ -39,7 +39,7 @@ or
.Lb libc
.Sh SYNOPSIS
.In locale.h
.Ft int
.Ft void
.Fn freelocale "locale_t locale"
.Sh DESCRIPTION
Frees a
@ -47,8 +47,6 @@ Frees a
This relinquishes any resources held exclusively by this locale.
Note that locales share reference-counted components,
so a call to this function is not guaranteed to free all of the components.
.Sh RETURN VALUES
Returns 0 on success or -1 on error.
.Sh SEE ALSO
.Xr duplocale 3 ,
.Xr localeconv 3 ,
@ -57,12 +55,5 @@ Returns 0 on success or -1 on error.
.Xr uselocale 3 ,
.Xr xlocale 3
.Sh STANDARDS
The
.Fn freelocale
function
differs from
.St -p1003.1-2008
in that its return type is
.Vt int
rather than
.Vt void .
This function conforms to
.St -p1003.1-2008 .

View File

@ -325,20 +325,18 @@ locale_t duplocale(locale_t base)
* Free a locale_t. This is quite a poorly named function. It actually
* disclaims a reference to a locale_t, rather than freeing it.
*/
int
void
freelocale(locale_t loc)
{
/* Fail if we're passed something that isn't a locale. */
if ((NULL == loc) || (LC_GLOBAL_LOCALE == loc)) {
return (-1);
}
/* If we're passed the global locale, pretend that we freed it but don't
* actually do anything. */
if (&__xlocale_global_locale == loc) {
return (0);
}
xlocale_release(loc);
return (0);
/*
* Fail if we're passed something that isn't a locale. If we're
* passed the global locale, pretend that we freed it but don't
* actually do anything.
*/
if (loc != NULL && loc != LC_GLOBAL_LOCALE &&
loc != &__xlocale_global_locale)
xlocale_release(loc);
}
/*