X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fstr.c;h=d7c71b11f5509f15678693555676c54cc4662e3f;hb=563b6160d2ed20120fbb62410a65e03c28537383;hp=a58c52c36ef5d096fd937fd38d61b142e6705541;hpb=b54cf7b8d3259f5de57a2e0ca53fa2e2c5185abf;p=pspp diff --git a/src/libpspp/str.c b/src/libpspp/str.c index a58c52c36e..d7c71b11f5 100644 --- a/src/libpspp/str.c +++ b/src/libpspp/str.c @@ -28,6 +28,7 @@ #include "libpspp/message.h" #include "libpspp/pool.h" +#include "gl/c-ctype.h" #include "gl/c-vasnprintf.h" #include "gl/relocatable.h" #include "gl/minmax.h" @@ -233,20 +234,26 @@ str_copy_buf_trunc (char *dst, size_t dst_size, dst[dst_len] = '\0'; } -/* Converts each byte in S to uppercase. */ +/* Converts each byte in S to uppercase. + + This is suitable only for ASCII strings. Use utf8_to_upper() for UTF-8 + strings.*/ void str_uppercase (char *s) { for (; *s != '\0'; s++) - *s = toupper ((unsigned char) *s); + *s = c_toupper ((unsigned char) *s); } -/* Converts each byte in S to lowercase. */ +/* Converts each byte in S to lowercase. + + This is suitable only for ASCII strings. Use utf8_to_lower() for UTF-8 + strings.*/ void str_lowercase (char *s) { for (; *s != '\0'; s++) - *s = tolower ((unsigned char) *s); + *s = c_tolower ((unsigned char) *s); } /* Converts NUMBER into a string in 26-adic notation in BUFFER, @@ -1586,6 +1593,13 @@ ds_put_byte_multiple (struct string *st, int ch, size_t cnt) memset (ds_put_uninit (st, cnt), ch, cnt); } +/* Appends Unicode code point UC to ST in UTF-8 encoding. */ +void +ds_put_unichar (struct string *st, ucs4_t uc) +{ + ds_extend (st, ds_length (st) + 6); + st->ss.length += u8_uctomb (CHAR_CAST (uint8_t *, ds_end (st)), uc, 6); +} /* If relocation has been enabled, replace ST, with its relocated version */