mirror of
https://github.com/reactos/reactos.git
synced 2024-11-20 06:15:26 +00:00
435a566751
* sumatrapdf - vendor import * everything compiles (libjpeg, poppler, fitz, sumatrapdf) * does NOT link (remove the comment tags in the parent directory.rbuild file (rosapps dir) to build it) svn path=/trunk/; revision=29295
117 lines
3.6 KiB
C
117 lines
3.6 KiB
C
/* Written by Krzysztof Kowalczyk (http://blog.kowalczyk.info)
|
|
The author disclaims copyright to this source code. */
|
|
#ifndef STR_UTIL_H_
|
|
#define STR_UTIL_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/* DOS is 0xd 0xa */
|
|
#define DOS_NEWLINE "\x0d\x0a"
|
|
/* Mac is single 0xd */
|
|
#define MAC_NEWLINE "\x0d"
|
|
/* Unix is single 0xa (10) */
|
|
#define UNIX_NEWLINE "\x0a"
|
|
#define UNIX_NEWLINE_C 0xa
|
|
|
|
#ifdef _WIN32
|
|
#define DIR_SEP_CHAR '\\'
|
|
#define DIR_SEP_STR "\\"
|
|
#else
|
|
#define DIR_SEP_CHAR '/'
|
|
#define DIR_SEP_STR "/"
|
|
#endif
|
|
|
|
void no_op(void);
|
|
|
|
#ifdef DEBUG
|
|
#ifdef _WIN32
|
|
#define DBG_OUT win32_dbg_out
|
|
#define DBG_OUT_HEX win32_dbg_out_hex
|
|
#else
|
|
#define DBG_OUT printf
|
|
#define DBG_OUT_HEX(...) no_op()
|
|
#endif
|
|
#else
|
|
#define DBG_OUT(...) no_op()
|
|
#define DBG_OUT_HEX(...) no_op()
|
|
#endif
|
|
|
|
int char_is_ws_or_zero(char c);
|
|
int char_is_ws(char c);
|
|
int char_is_digit(char c);
|
|
|
|
/* TODO: should probably be based on MSVC version */
|
|
#if defined(__GNUC__) || !defined(_WIN32) || (_MSC_VER < 1400)
|
|
void strcpy_s(char *dst, size_t dstLen, const char *src);
|
|
#endif
|
|
|
|
#define str_len strlen
|
|
int str_eq(const char *str1, const char *str2);
|
|
int str_ieq(const char *str1, const char *str2);
|
|
#define str_eq_no_case str_ieq
|
|
int str_eqn(const char *str1, const char *str2, int len);
|
|
int str_startswith(const char *str, const char *txt);
|
|
int str_startswithi(const char *str, const char *txt);
|
|
int str_endswith(const char *str, const char *end);
|
|
int str_endswithi(const char *str, const char *end);
|
|
int str_endswith_char(const char *str, char c);
|
|
int str_empty(const char *str);
|
|
int str_copy(char *dst, size_t dst_cch_size, const char *src);
|
|
int str_copyn(char *dst, size_t dst_cch_size, const char *src, size_t src_cch_size);
|
|
char * str_dup(const char *str);
|
|
char * str_dupn(const char *str, size_t len);
|
|
char * str_cat(const char *str1, const char *str2);
|
|
char * str_cat3(const char *str1, const char *str2, const char *str3);
|
|
char * str_cat4(const char *str1, const char *str2, const char *str3, const char *str4);
|
|
char * str_url_encode(const char *str);
|
|
int char_needs_url_escape(char c);
|
|
int str_contains(const char *str, char c);
|
|
char * str_printf_args(const char *format, va_list args);
|
|
char * str_printf(const char *format, ...);
|
|
const char *str_find_char(const char *txt, char c);
|
|
char * str_split_iter(char **txt, char c);
|
|
char * str_normalize_newline(const char *txt, const char *replace);
|
|
void str_strip_left(char *txt, const char *to_strip);
|
|
void str_strip_ws_left(char *txt);
|
|
void str_strip_right(char *txt, const char *to_strip);
|
|
void str_strip_ws_right(char *txt);
|
|
void str_strip_both(char *txt, const char *to_strip);
|
|
void str_strip_ws_both(char *txt);
|
|
char * str_escape(const char *txt);
|
|
char * str_parse_possibly_quoted(char **txt);
|
|
|
|
#ifdef DEBUG
|
|
void str_util_test(void);
|
|
#endif
|
|
|
|
typedef struct str_item str_item;
|
|
typedef struct str_array str_array;
|
|
|
|
struct str_item {
|
|
void * opaque; /* opaque data that the user can use */
|
|
char str[1];
|
|
};
|
|
|
|
struct str_array {
|
|
int items_allocated;
|
|
int items_count;
|
|
str_item ** items;
|
|
};
|
|
|
|
void str_array_init(str_array *str_arr);
|
|
void str_array_free(str_array *str_arr);
|
|
void str_array_delete(str_array *str_arr);
|
|
str_item *str_array_set(str_array *str_arr, int index, const char *str);
|
|
str_item *str_array_add(str_array *str_arr, const char *str);
|
|
str_item *str_array_get(str_array *str_arr, int index);
|
|
int str_array_get_count(str_array *str_arr);
|
|
int str_array_exists_no_case(str_array *str_arr, const char *str);
|
|
str_item *str_array_add_no_dups(str_array *str_arr, const char *str);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif
|