Print this page
2964 need POSIX 2008 locale object support
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Approved by: TBD

*** 1,6 **** --- 1,7 ---- /* + * Copyright 2013 Garrett D'Amore <garrett@damore.org> * Copyright 2010 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 1995 Alex Tatmanjants <alex@elvisti.kiev.ua> * at Electronni Visti IA, Kiev, Ukraine. * All rights reserved. *
*** 30,43 **** #include <stdlib.h> #include <string.h> #include <errno.h> #include <wchar.h> #include <assert.h> #include "collate.h" size_t ! strxfrm(char *_RESTRICT_KYWD xf, const char *_RESTRICT_KYWD src, size_t dlen) { size_t slen; size_t xlen; wchar_t *wcs = NULL; --- 31,46 ---- #include <stdlib.h> #include <string.h> #include <errno.h> #include <wchar.h> #include <assert.h> + #include <xlocale.h> #include "collate.h" size_t ! strxfrm_l(char *_RESTRICT_KYWD xf, const char *_RESTRICT_KYWD src, ! size_t dlen, locale_t loc) { size_t slen; size_t xlen; wchar_t *wcs = NULL;
*** 52,71 **** * strictly reducing (one byte of an mbs cannot expand to more * than one wide character.) */ slen = strlen(src); ! if (_collate_load_error) goto error; if ((wcs = malloc((slen + 1) * sizeof (wchar_t))) == NULL) goto error; ! if (mbstowcs(wcs, src, slen + 1) == (size_t)-1) goto error; ! if ((xlen = _collate_sxfrm(wcs, xf, dlen)) == (size_t)-1) goto error; if (wcs) free(wcs); --- 55,74 ---- * strictly reducing (one byte of an mbs cannot expand to more * than one wide character.) */ slen = strlen(src); ! if (loc->collate->lc_is_posix) goto error; if ((wcs = malloc((slen + 1) * sizeof (wchar_t))) == NULL) goto error; ! if (mbstowcs_l(wcs, src, slen + 1, loc) == (size_t)-1) goto error; ! if ((xlen = _collate_sxfrm(wcs, xf, dlen, loc)) == (size_t)-1) goto error; if (wcs) free(wcs);
*** 82,87 **** --- 85,96 ---- if (wcs) free(wcs); (void) strlcpy(xf, src, dlen); return (slen); + } + + size_t + strxfrm(char *_RESTRICT_KYWD xf, const char *_RESTRICT_KYWD src, size_t dlen) + { + return (strxfrm_l(xf, src, dlen, uselocale(NULL))); }