Changeset 61e29a4d in mainline


Ignore:
Timestamp:
2011-06-25T05:23:41Z (13 years ago)
Author:
Oleg Romanenko <romanenko.oleg@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2e839dda
Parents:
2d0d637
Message:

Modifications in str.c

  1. Add function wstr_is_ascii
  2. Add return value (error code) to functions: wstr_to_str and str_to_wstr
Location:
uspace/lib/c
Files:
2 edited

Legend:

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

    r2d0d637 r61e29a4d  
    366366}
    367367
     368/** Check whether wide string is plain ASCII.
     369 *
     370 * @return True if wide string is plain ASCII.
     371 *
     372 */
     373bool wstr_is_ascii(const wchar_t *wstr)
     374{
     375        while (*wstr && ascii_check(*wstr))
     376                wstr++;
     377        return *wstr == 0;
     378}
     379
    368380/** Check whether character is valid
    369381 *
     
    552564 * @param size  Size of the destination buffer.
    553565 * @param src   Source wide string.
    554  */
    555 void wstr_to_str(char *dest, size_t size, const wchar_t *src)
    556 {
     566 *
     567 * @return EOK, if success, negative otherwise.
     568 */
     569int wstr_to_str(char *dest, size_t size, const wchar_t *src)
     570{
     571        int rc;
    557572        wchar_t ch;
    558573        size_t src_idx;
     
    566581
    567582        while ((ch = src[src_idx++]) != 0) {
    568                 if (chr_encode(ch, dest, &dest_off, size - 1) != EOK)
     583                rc = chr_encode(ch, dest, &dest_off, size - 1);
     584                if (rc != EOK)
    569585                        break;
    570586        }
    571587
    572588        dest[dest_off] = '\0';
     589        return rc;
    573590}
    574591
     
    631648 * @param dlen  Length of destination buffer (number of wchars).
    632649 * @param src   Source string.
    633  */
    634 void str_to_wstr(wchar_t *dest, size_t dlen, const char *src)
    635 {
     650 *
     651 * @return EOK, if success, negative otherwise.
     652 */
     653int str_to_wstr(wchar_t *dest, size_t dlen, const char *src)
     654{
     655        int rc=EOK;
    636656        size_t offset;
    637657        size_t di;
     
    644664
    645665        do {
    646                 if (di >= dlen - 1)
     666                if (di >= dlen - 1) {
     667                        rc = EOVERFLOW;
    647668                        break;
     669                }
    648670
    649671                c = str_decode(src, &offset, STR_NO_LIMIT);
     
    652674
    653675        dest[dlen - 1] = '\0';
     676        return rc;
    654677}
    655678
  • uspace/lib/c/include/str.h

    r2d0d637 r61e29a4d  
    6565extern bool ascii_check(wchar_t ch);
    6666extern bool chr_check(wchar_t ch);
     67extern bool wstr_is_ascii(const wchar_t *wstr);
    6768
    6869extern int str_cmp(const char *s1, const char *s2);
     
    7374extern void str_append(char *dest, size_t size, const char *src);
    7475
    75 extern void wstr_to_str(char *dest, size_t size, const wchar_t *src);
     76extern int wstr_to_str(char *dest, size_t size, const wchar_t *src);
    7677extern char *wstr_to_astr(const wchar_t *src);
    77 extern void str_to_wstr(wchar_t *dest, size_t dlen, const char *src);
     78extern int str_to_wstr(wchar_t *dest, size_t dlen, const char *src);
    7879
    7980extern char *str_chr(const char *str, wchar_t ch);
Note: See TracChangeset for help on using the changeset viewer.