/* Locale dependent transformation for comparison of Unicode strings.
- Copyright (C) 2009 Free Software Foundation, Inc.
+ Copyright (C) 2009-2012 Free Software Foundation, Inc.
Written by Bruno Haible <bruno@clisp.org>, 2009.
This program is free software: you can redistribute it and/or modify it
char convsbuf[2048];
char *convs;
size_t convs_length;
- int ret;
char *result;
/* Normalize the Unicode string. */
return NULL;
/* Convert it to locale encoding. */
- convs = convsbuf;
convs_length = sizeof (convsbuf) - 1;
- ret = U_CONV_TO_ENCODING (locale_charset (),
- iconveh_error,
- norms, norms_length,
- NULL,
- &convs, &convs_length);
- if (ret < 0)
+ convs = U_CONV_TO_ENCODING (locale_charset (),
+ iconveh_error,
+ norms, norms_length,
+ NULL,
+ convsbuf, &convs_length);
+ if (convs == NULL)
{
if (norms != normsbuf)
- {
- int saved_errno = errno;
- free (norms);
- errno = saved_errno;
- }
+ {
+ int saved_errno = errno;
+ free (norms);
+ errno = saved_errno;
+ }
return NULL;
}
{
char *memory = (char *) realloc (convs, convs_length + 1);
if (memory == NULL)
- {
- free (convs);
- errno = ENOMEM;
- return NULL;
- }
+ {
+ free (convs);
+ errno = ENOMEM;
+ return NULL;
+ }
convs = memory;
}
/* Apply locale dependent transformations for comparison. */
- result = memxfrm (convs, convs_length, resultbuf, lengthp);
+ result = amemxfrm (convs, convs_length, resultbuf, lengthp);
if (result == NULL)
{
if (convs != convsbuf)
- {
- int saved_errno = errno;
- free (convs);
- errno = saved_errno;
- }
+ {
+ int saved_errno = errno;
+ free (convs);
+ errno = saved_errno;
+ }
return NULL;
}