1 #pragma once 2 #ifndef IWXSTR_H 3 #define IWXSTR_H 4 5 /************************************************************************************************** 6 * IOWOW library 7 * 8 * MIT License 9 * 10 * Copyright (c) 2012-2022 Softmotions Ltd <info@softmotions.com> 11 * 12 * Permission is hereby granted, free of charge, to any person obtaining a copy 13 * of this software and associated documentation files (the "Software"), to deal 14 * in the Software without restriction, including without limitation the rights 15 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 16 * copies of the Software, and to permit persons to whom the Software is 17 * furnished to do so, subject to the following conditions: 18 * 19 * The above copyright notice and this permission notice shall be included in all 20 * copies or substantial portions of the Software. 21 * 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 28 * SOFTWARE. 29 *************************************************************************************************/ 30 31 #include "basedefs.h" 32 33 #include <stdarg.h> 34 35 IW_EXTERN_C_START 36 37 typedef struct _IWXSTR IWXSTR; 38 39 IW_EXPORT IW_ALLOC IWXSTR* iwxstr_new(void); 40 41 IW_EXPORT IWXSTR* iwxstr_new2(size_t siz); 42 43 IW_EXPORT IWXSTR* iwxstr_new_printf(const char *format, ...) __attribute__ ((format(__printf__, 1, 2))); 44 45 IW_EXPORT IWXSTR* iwxstr_new_clone(const IWXSTR *xstr); 46 47 IW_EXPORT IWXSTR* iwxstr_wrap(char *buf, size_t size, size_t asize); 48 49 IW_EXPORT void iwxstr_destroy(IWXSTR *xstr); 50 51 IW_EXPORT IW_ALLOC char* iwxstr_destroy_keep_ptr(IWXSTR *xstr); 52 53 IW_EXPORT iwrc iwxstr_cat(IWXSTR *xstr, const void *buf, size_t size); 54 55 IW_EXPORT iwrc iwxstr_cat2(IWXSTR *xstr, const char *buf); 56 57 IW_EXPORT iwrc iwxstr_unshift(IWXSTR *xstr, const void *buf, size_t size); 58 59 IW_EXPORT iwrc iwxstr_vaprintf(IWXSTR *xstr, const char *format, va_list va); 60 61 IW_EXPORT iwrc iwxstr_printf(IWXSTR *xstr, const char *format, ...) __attribute__((format(__printf__, 2, 3))); 62 63 IW_EXPORT void iwxstr_shift(IWXSTR *xstr, size_t shift_size); 64 65 IW_EXPORT void iwxstr_pop(IWXSTR *xstr, size_t pop_size); 66 67 IW_EXPORT iwrc iwxstr_insert(IWXSTR *xstr, size_t pos, const void *buf, size_t size); 68 69 IW_EXPORT iwrc iwxstr_insert_vaprintf(IWXSTR *xstr, size_t pos, const char *format, va_list va); 70 71 IW_EXPORT iwrc iwxstr_insert_printf(IWXSTR *xstr, size_t pos, const char *format, ...) __attribute__((format(__printf__, 3, 4))); 72 73 IW_EXPORT char* iwxstr_ptr(IWXSTR *xstr); 74 75 IW_EXPORT iwrc iwxstr_set_size(IWXSTR *xstr, size_t size); 76 77 /** 78 * Returns actual size of data stored in @a xstr buffer. 79 */ 80 IW_EXPORT size_t iwxstr_size(IWXSTR *xstr); 81 82 /** 83 * @brief Returns allocated size of @a xstr buffer. 84 */ 85 IW_EXPORT size_t iwxstr_asize(IWXSTR *xstr); 86 87 IW_EXPORT void iwxstr_user_data_set(IWXSTR *xstr, void *data, void (*free_fn)(void*)); 88 89 IW_EXPORT void* iwxstr_user_data_get(IWXSTR *xstr); 90 91 IW_EXPORT void* iwxstr_user_data_detach(IWXSTR *xstr); 92 93 IW_EXPORT void iwxstr_clear(IWXSTR *xstr); 94 95 IW_EXTERN_C_END 96 #endif 97