~vojtech-horky/helenos/helenos-qemu

« back to all changes in this revision

Viewing changes to uspace/lib/c/generic/str.c

  • Committer: Vojtech Horky
  • Date: 2017-06-14 06:22:31 UTC
  • mfrom: (2103.1.569 HelenOS.mainline)
  • Revision ID: vojtechhorky@users.sourceforge.net-20170614062231-q4ui9pyxp0gs2hrl
MergeĀ mainlineĀ changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
 
38
38
#include <str.h>
39
39
#include <stdlib.h>
 
40
#include <stddef.h>
40
41
#include <assert.h>
41
42
#include <stdint.h>
42
43
#include <ctype.h>
949
950
        return rc;
950
951
}
951
952
 
952
 
int str_to_utf16(uint16_t *dest, size_t size, const char *src)
 
953
/** Convert string to UTF16 string.
 
954
 *
 
955
 * Convert string @a src to utf16 string. The output is written to the buffer
 
956
 * specified by @a dest and @a dlen. @a dlen must be non-zero and the string
 
957
 * written will always be well-formed. Surrogate pairs also supported.
 
958
 *
 
959
 * @param dest  Destination buffer.
 
960
 * @param dlen  Number of utf16 characters that fit in the destination buffer.
 
961
 * @param src   Source string.
 
962
 *
 
963
 * @return EOK, if success, negative otherwise.
 
964
 */
 
965
int str_to_utf16(uint16_t *dest, size_t dlen, const char *src)
953
966
{
954
967
        int rc = EOK;
955
968
        size_t offset = 0;
956
969
        size_t idx = 0;
957
970
        wchar_t c;
958
971
 
959
 
        assert(size > 0);
 
972
        assert(dlen > 0);
960
973
        
961
974
        while ((c = str_decode(src, &offset, STR_NO_LIMIT)) != 0) {
962
975
                if (c > 0x10000) {
963
 
                        if (idx + 2 >= size - 1) {
 
976
                        if (idx + 2 >= dlen - 1) {
964
977
                                rc = EOVERFLOW;
965
978
                                break;
966
979
                        }
973
986
                }
974
987
 
975
988
                idx++;
976
 
                if (idx >= size - 1) {
 
989
                if (idx >= dlen - 1) {
977
990
                        rc = EOVERFLOW;
978
991
                        break;
979
992
                }
1239
1252
        return true;
1240
1253
}
1241
1254
 
1242
 
int stricmp(const char *a, const char *b)
1243
 
{
1244
 
        int c = 0;
1245
 
        
1246
 
        while (a[c] && b[c] && (!(tolower(a[c]) - tolower(b[c]))))
1247
 
                c++;
1248
 
        
1249
 
        return (tolower(a[c]) - tolower(b[c]));
1250
 
}
1251
 
 
1252
1255
/** Convert string to a number.
1253
1256
 * Core of strtol and strtoul functions.
1254
1257
 *