Changeset 2e839dda in mainline


Ignore:
Timestamp:
2011-06-27T16:35:11Z (13 years ago)
Author:
Oleg Romanenko <romanenko.oleg@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7194a60
Parents:
61e29a4d
Message:

New functions for string library:

  1. Lookup for character in wide string

wstr_chr
wstr_rchr

  1. Convert size_t to string: size_t_str
  2. Reverse string: str_reverse
Location:
uspace/lib/c
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/str.c

    r61e29a4d r2e839dda  
    722722}
    723723
     724/** Find first occurence of character in wide string.
     725 *
     726 * @param wstr String to search.
     727 * @param ch  Character to look for.
     728 *
     729 * @return Pointer to character in @a wstr or NULL if not found.
     730 */
     731wchar_t *wstr_chr(const wchar_t *wstr, wchar_t ch)
     732{
     733        while (*wstr && *wstr != ch)
     734                wstr++;
     735        if (*wstr)
     736                return (wchar_t *) wstr;
     737        else
     738                return NULL;
     739}
     740
     741/** Find last occurence of character in wide string.
     742 *
     743 * @param wstr String to search.
     744 * @param ch  Character to look for.
     745 *
     746 * @return Pointer to character in @a wstr or NULL if not found.
     747 */
     748wchar_t *wstr_rchr(const wchar_t *wstr, wchar_t ch)
     749{
     750        const wchar_t *res = NULL;
     751        while (*wstr) {
     752                if (*wstr == ch)
     753                        res = wstr;
     754                wstr++;
     755        }
     756        return (wchar_t *) res;
     757}
     758
    724759/** Insert a wide character into a wide string.
    725760 *
     
    9741009}
    9751010
     1011void str_reverse(char* begin, char* end)
     1012{
     1013    char aux;
     1014    while(end>begin)
     1015        aux=*end, *end--=*begin, *begin++=aux;
     1016}
     1017
     1018int size_t_str(size_t value, int base, char* str, size_t size)
     1019{
     1020    static char num[] = "0123456789abcdefghijklmnopqrstuvwxyz";
     1021    char* wstr=str;
     1022       
     1023        if (size == 0)
     1024                return EINVAL;
     1025    if (base<2 || base>35) {
     1026        *str='\0';
     1027        return EINVAL;
     1028    }
     1029
     1030    do {
     1031        *wstr++ = num[value % base];
     1032                if (--size == 0)
     1033                        return EOVERFLOW;
     1034    } while(value /= base);
     1035    *wstr='\0';
     1036
     1037    // Reverse string
     1038    str_reverse(str,wstr-1);
     1039        return EOK;
     1040}
    9761041
    9771042/** Convert initial part of string to unsigned long according to given base.
  • uspace/lib/c/include/str.h

    r61e29a4d r2e839dda  
    8080extern char *str_chr(const char *str, wchar_t ch);
    8181extern char *str_rchr(const char *str, wchar_t ch);
     82extern wchar_t *wstr_chr(const wchar_t *wstr, wchar_t ch);
     83extern wchar_t *wstr_rchr(const wchar_t *wstr, wchar_t ch);
    8284
    8385extern bool wstr_linsert(wchar_t *str, wchar_t ch, size_t pos, size_t max_pos);
     
    8688extern char *str_dup(const char *);
    8789extern char *str_ndup(const char *, size_t max_size);
     90
     91extern void str_reverse(char* begin, char* end);
     92extern int size_t_str(size_t value, int base, char* str, size_t size);
    8893
    8994extern int str_uint64(const char *, char **, unsigned int, bool, uint64_t *);
Note: See TracChangeset for help on using the changeset viewer.