Changes in uspace/lib/c/generic/str.c [d7f6248:8e893ae] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/str.c
rd7f6248 r8e893ae 46 46 #include <mem.h> 47 47 #include <str.h> 48 49 /** Check the condition if wchar_t is signed */ 50 #ifdef WCHAR_IS_UNSIGNED 51 #define WCHAR_SIGNED_CHECK(cond) (true) 52 #else 53 #define WCHAR_SIGNED_CHECK(cond) (cond) 54 #endif 48 55 49 56 /** Byte mask consisting of lowest @n bits (out of 8) */ … … 261 268 } 262 269 270 /** Get size of string with size limit. 271 * 272 * Get the number of bytes which are used by the string @a str 273 * (excluding the NULL-terminator), but no more than @max_size bytes. 274 * 275 * @param str String to consider. 276 * @param max_size Maximum number of bytes to measure. 277 * 278 * @return Number of bytes used by the string 279 * 280 */ 281 size_t str_nsize(const char *str, size_t max_size) 282 { 283 size_t size = 0; 284 285 while ((*str++ != 0) && (size < max_size)) 286 size++; 287 288 return size; 289 } 290 291 /** Get size of wide string with size limit. 292 * 293 * Get the number of bytes which are used by the wide string @a str 294 * (excluding the NULL-terminator), but no more than @max_size bytes. 295 * 296 * @param str Wide string to consider. 297 * @param max_size Maximum number of bytes to measure. 298 * 299 * @return Number of bytes used by the wide string 300 * 301 */ 302 size_t wstr_nsize(const wchar_t *str, size_t max_size) 303 { 304 return (wstr_nlength(str, max_size) * sizeof(wchar_t)); 305 } 306 263 307 /** Get size of wide string with length limit. 264 308 * … … 362 406 bool ascii_check(wchar_t ch) 363 407 { 364 if ( (ch >= 0) && (ch <= 127))408 if (WCHAR_SIGNED_CHECK(ch >= 0) && (ch <= 127)) 365 409 return true; 366 410 … … 375 419 bool chr_check(wchar_t ch) 376 420 { 377 if ( (ch >= 0) && (ch <= 1114111))421 if (WCHAR_SIGNED_CHECK(ch >= 0) && (ch <= 1114111)) 378 422 return true; 379 423 … … 476 520 * @param count Size of the destination buffer (must be > 0). 477 521 * @param src Source string. 522 * 478 523 */ 479 524 void str_cpy(char *dest, size_t size, const char *src) … … 508 553 * @param src Source string. 509 554 * @param n Maximum number of bytes to read from @a src. 555 * 510 556 */ 511 557 void str_ncpy(char *dest, size_t size, const char *src, size_t n) … … 839 885 840 886 return NULL; 887 } 888 889 /** Removes specified trailing characters from a string. 890 * 891 * @param str String to remove from. 892 * @param ch Character to remove. 893 */ 894 void str_rtrim(char *str, wchar_t ch) 895 { 896 size_t off = 0; 897 size_t pos = 0; 898 wchar_t c; 899 bool update_last_chunk = true; 900 char *last_chunk = NULL; 901 902 while ((c = str_decode(str, &off, STR_NO_LIMIT))) { 903 if (c != ch) { 904 update_last_chunk = true; 905 last_chunk = NULL; 906 } else if (update_last_chunk) { 907 update_last_chunk = false; 908 last_chunk = (str + pos); 909 } 910 pos = off; 911 } 912 913 if (last_chunk) 914 *last_chunk = '\0'; 915 } 916 917 /** Removes specified leading characters from a string. 918 * 919 * @param str String to remove from. 920 * @param ch Character to remove. 921 */ 922 void str_ltrim(char *str, wchar_t ch) 923 { 924 wchar_t acc; 925 size_t off = 0; 926 size_t pos = 0; 927 size_t str_sz = str_size(str); 928 929 while ((acc = str_decode(str, &off, STR_NO_LIMIT)) != 0) { 930 if (acc != ch) 931 break; 932 else 933 pos = off; 934 } 935 936 if (pos > 0) { 937 memmove(str, &str[pos], str_sz - pos); 938 pos = str_sz - pos; 939 str[str_sz - pos] = '\0'; 940 } 841 941 } 842 942 … … 1444 1544 * 1445 1545 */ 1446 int str_uint64 (const char *nptr, char **endptr, unsigned int base,1546 int str_uint64_t(const char *nptr, char **endptr, unsigned int base, 1447 1547 bool strict, uint64_t *result) 1448 1548 {
Note:
See TracChangeset
for help on using the changeset viewer.