source: mainline/uspace/lib/c/include/str.h@ 36f0738

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 36f0738 was 36f0738, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 7 years ago

Add #include <errno.h> where necessary for the following commits.

It's very likely this does not account for all the places where the include
should be, but this is enough for the code to build.

  • Property mode set to 100644
File size: 5.1 KB
Line 
1/*
2 * Copyright (c) 2005 Martin Decky
3 * Copyright (c) 2011 Oleg Romanenko
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/** @addtogroup libc
31 * @{
32 */
33/** @file
34 */
35
36#ifndef LIBC_STR_H_
37#define LIBC_STR_H_
38
39#include <errno.h>
40#include <mem.h>
41#include <stddef.h>
42#include <stdint.h>
43#include <stdbool.h>
44
45#define U_SPECIAL '?'
46
47/** No size limit constant */
48#define STR_NO_LIMIT ((size_t) -1)
49
50/** Maximum size of a string containing @c length characters */
51#define STR_BOUNDS(length) ((length) << 2)
52
53/**
54 * Maximum size of a buffer needed to a string converted from space-padded
55 * ASCII of size @a spa_size using spascii_to_str().
56 */
57#define SPASCII_STR_BUFSIZE(spa_size) ((spa_size) + 1)
58
59extern wchar_t str_decode(const char *str, size_t *offset, size_t sz);
60extern wchar_t str_decode_reverse(const char *str, size_t *offset, size_t sz);
61extern int chr_encode(const wchar_t ch, char *str, size_t *offset, size_t sz);
62
63extern size_t str_size(const char *str);
64extern size_t wstr_size(const wchar_t *str);
65
66extern size_t str_nsize(const char *str, size_t max_size);
67extern size_t wstr_nsize(const wchar_t *str, size_t max_size);
68
69extern size_t str_lsize(const char *str, size_t max_len);
70extern size_t wstr_lsize(const wchar_t *str, size_t max_len);
71
72extern size_t str_length(const char *str);
73extern size_t wstr_length(const wchar_t *wstr);
74
75extern size_t str_nlength(const char *str, size_t size);
76extern size_t wstr_nlength(const wchar_t *str, size_t size);
77
78extern size_t chr_width(wchar_t ch);
79extern size_t str_width(const char *str);
80
81extern bool ascii_check(wchar_t ch);
82extern bool chr_check(wchar_t ch);
83
84extern int str_cmp(const char *s1, const char *s2);
85extern int str_lcmp(const char *s1, const char *s2, size_t max_len);
86extern int str_casecmp(const char *s1, const char *s2);
87extern int str_lcasecmp(const char *s1, const char *s2, size_t max_len);
88
89extern bool str_test_prefix(const char *s, const char *p);
90
91extern void str_cpy(char *dest, size_t size, const char *src);
92extern void str_ncpy(char *dest, size_t size, const char *src, size_t n);
93extern void str_append(char *dest, size_t size, const char *src);
94
95extern int spascii_to_str(char *dest, size_t size, const uint8_t *src, size_t n);
96extern void wstr_to_str(char *dest, size_t size, const wchar_t *src);
97extern char *wstr_to_astr(const wchar_t *src);
98extern void str_to_wstr(wchar_t *dest, size_t dlen, const char *src);
99extern wchar_t *str_to_awstr(const char *src);
100extern int utf16_to_str(char *dest, size_t size, const uint16_t *src);
101extern int str_to_utf16(uint16_t *dest, size_t dlen, const char *src);
102extern size_t utf16_wsize(const uint16_t *ustr);
103
104extern char *str_chr(const char *str, wchar_t ch);
105extern char *str_rchr(const char *str, wchar_t ch);
106
107extern void str_rtrim(char *str, wchar_t ch);
108extern void str_ltrim(char *str, wchar_t ch);
109
110extern bool wstr_linsert(wchar_t *str, wchar_t ch, size_t pos, size_t max_pos);
111extern bool wstr_remove(wchar_t *str, size_t pos);
112
113extern char *str_dup(const char *);
114extern char *str_ndup(const char *, size_t max_size);
115
116extern char *str_tok(char *, const char *, char **);
117
118extern int str_uint8_t(const char *, const char **, unsigned int, bool,
119 uint8_t *);
120extern int str_uint16_t(const char *, const char **, unsigned int, bool,
121 uint16_t *);
122extern int str_uint32_t(const char *, const char **, unsigned int, bool,
123 uint32_t *);
124extern int str_uint64_t(const char *, const char **, unsigned int, bool,
125 uint64_t *);
126extern int str_size_t(const char *, const char **, unsigned int, bool,
127 size_t *);
128
129extern void order_suffix(const uint64_t, uint64_t *, char *);
130extern void bin_order_suffix(const uint64_t, uint64_t *, const char **, bool);
131
132/*
133 * TODO: Get rid of this.
134 */
135
136extern long int strtol(const char *, char **, int);
137extern unsigned long strtoul(const char *, char **, int);
138
139#endif
140
141/** @}
142 */
Note: See TracBrowser for help on using the repository browser.