DUPLOCALE(3) Library Functions Manual DUPLOCALE(3)

duplocaleduplicate a locale object


#include <locale.h>

locale_t duplocale(locale_t locobj);

The duplocale () function shall create a duplicate copy of the locale object referenced by the locobj argument.

If the locobj argument is LC_GLOBAL_LOCALE, duplocale () shall create a new locale object containing a copy of the global locale determined by the setlocale(3) function.

The behavior is undefined if the locobj argument is not a valid locale object handle.

Upon successful completion, the duplocale () function shall return a handle for a new locale object. Otherwise, duplocale () shall return ( locale_t) 0 and set to indicate the error.

The duplocale () function shall fail if:

There is not enough memory available to create the locale object or load the locale data.

The following example shows a code fragment to create a slightly altered version of an existing locale object. The function takes a locale object and a locale name and it replaces the category data in the locale object with that from the named locale.

#include <locale.h>
...


locale_t
with_changed_lc_time (locale_t obj, const char *name)
{


    locale_t retval = duplocale (obj);
    if (retval != (locale_t) 0)
    {
        locale_t changed = newlocale (LC_TIME_MASK, name, retval);
        if (changed == (locale_t) 0)
            /* An error occurred. Free all allocated resources. */
            freelocale (retval);
        retval = changed;
    }
    return retval; }
}

The use of the duplocale () function is recommended for situations where a locale object is being used in multiple places, and it is possible that the lifetime of the locale object might end before all uses are finished. Another reason to duplicate a locale object is if a slightly modified form is needed. This can be achieved by a call to newlocale(3) following the duplocale () call.

As with the newlocale(3) function, handles for locale objects created by the duplocale () function should be released by a corresponding call to freelocale(3).

The duplocale () function can also be used in conjunction with (( locale_t) 0). This returns the locale in effect for the calling thread, but can have the value LC_GLOBAL_LOCALE. Passing LC_GLOBAL_LOCALE to functions such as isalnum_l(3) results in undefined behavior, but applications can convert it into a usable locale object by using duplocale ().

None.

None.

freelocale(3), newlocale(3), uselocale(3)

XBD <locale.h>

First released in Issue 7.

POSIX.1-2008, Technical Corrigendum 1, XSH/TC1-2008/0077 [283,301], XSH/TC1-2008/0078 [283], and XSH/TC1-2008/0079 [301] are applied.

January 1, 2013 posix.fail