Defect Report #049
Submission Date: 10 Jan 93
Submittor: Project Editor (P.J. Plauger)
Source: David Metsky
Question 1
It has been suggested that, at least in the "C" locale, the
transformed string output from strxfrm will not contain more
characters than the original string. I believe that this suggestion
is overly restrictive, and that the standard does not impose such
a restriction on implementations. I am requesting a clarification
from the appropriate standards committee(s). I hope that you will
agree with the following resolution:
The C Standard does not impose a requirement upon the length
of the transformed string output from strxfrm. (The returned
value does indicate the necessary length.)
Here are some citations from the C Standard:
Subclause 7.4.1.1 The setlocale function:
LC_COLLATE affects the behavior of the strcoll and
strxfrm functions... A value of "C" for locale specifies
the minimal environment for C translation... At program startup, the
equivalent of
setlocale(LC_ALL, "C");
is executed.
Subclause 7.11.4.3 The strcoll function:
The strcoll function compares the string pointed to by
s1 to the string pointed to by s2, both interpreted as
appropriate to the LC_COLLATE category of the current locale.
Subclause 7.11.4.5 The strxfrm function:
The transformation is such that if the strcmp function
is applied to two transformed strings, it returns a value greater
than, equal to, or less than zero, corresponding to the result of
the strcoll function applied to the same two original strings...
The strxfrm function returns the length of the transformed string
(not including the terminating null character). If the value returned
is n or more, the contents of the array pointed to by s1
are indeterminate.
I haven't located any requirement that the "C" locale behavior
of strcoll must be identical to strcmp. Even if there
were such a requirement, I haven't located any requirement that the
transformed string must not be longer than the original string.
Response
We support your resolution:
The C Standard does not impose a requirement upon the length of the
transformed string output from strxfrm, other than a limitation
on the size of objects. (The returned value does indicate the necessary
length.)
Previous Defect Report
< - >
Next Defect Report