ltk

GUI toolkit for X11 (WIP)
git clone git://lumidify.org/ltk.git (fast, but not encrypted)
git clone https://lumidify.org/ltk.git (encrypted, but very slow)
git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltk.git (over tor)
Log | Files | Refs | README | LICENSE

util.h (3597B)


      1 /*
      2  * Copyright (c) 2021-2024 lumidify <nobody@lumidify.org>
      3  *
      4  * Permission to use, copy, modify, and/or distribute this software for any
      5  * purpose with or without fee is hereby granted, provided that the above
      6  * copyright notice and this permission notice appear in all copies.
      7  *
      8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
      9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     15  */
     16 
     17 #ifndef LTK_UTIL_H
     18 #define LTK_UTIL_H
     19 
     20 #include <stdarg.h>
     21 #include <stddef.h>
     22 
     23 long long ltk_strtonum(
     24     const char *numstr, long long minval,
     25     long long maxval, const char **errstrp
     26 );
     27 long long ltk_strtoscalednum(
     28     const char *numstr, long long minval, long long maxval,
     29     char **endptr, const char **errstrp
     30 );
     31 
     32 char *ltk_read_file(const char *filename, size_t *len_ret, char **errstr_ret);
     33 int ltk_write_file(const char *path, const char *data, size_t len, char **errstr_ret);
     34 int ltk_parse_run_cmd(const char *cmdtext, size_t len, const char *filename);
     35 void ltk_grow_string(char **str, int *alloc_size, int needed);
     36 char *ltk_setup_directory(const char *envname, const char *defaultname, int create);
     37 char *ltk_strcat_useful(const char *str1, const char *str2);
     38 
     39 /*
     40  * Compare the nul-terminated string 'terminated' with the char
     41  * array 'array' with length 'len'.
     42  * Returns non-zero if they are equal, 0 otherwise.
     43  */
     44 /* Note: this doesn't work if array contains '\0'. */
     45 int str_array_equal(const char *terminated, const char *array, size_t len);
     46 
     47 size_t prev_utf8(char *text, size_t index);
     48 size_t next_utf8(char *text, size_t len, size_t index);
     49 
     50 /* based on the assert found in OpenBSD */
     51 void ltk_assert_impl(const char *file, int line, const char *func, const char *failedexpr);
     52 #define ltk_assert(e) ((e) ? (void)0 : ltk_assert_impl(__FILE__, __LINE__, __func__, #e))
     53 
     54 #define LENGTH(X) (sizeof(X) / sizeof(X[0]))
     55 
     56 #define LTK_GEN_LOG_FUNC_PROTO(prefix)			\
     57 void prefix##_warn_errno(const char *format, ...);	\
     58 void prefix##_fatal_errno(const char *format, ...);	\
     59 void prefix##_fatal(const char *format, ...);		\
     60 void prefix##_warn(const char *format, ...);
     61 
     62 #define LTK_GEN_LOG_FUNCS(prefix, log_func, cleanup_func)	\
     63 void								\
     64 prefix##_warn(const char *format, ...) {			\
     65 	va_list args;						\
     66 	va_start(args, format);					\
     67 	log_func("Warning", format, args);			\
     68 	va_end(args);						\
     69 }								\
     70 								\
     71 void								\
     72 prefix##_fatal(const char *format, ...) {			\
     73 	va_list args;						\
     74 	va_start(args, format);					\
     75 	log_func("Fatal", format, args);			\
     76 	va_end(args);						\
     77 	cleanup_func();						\
     78 								\
     79 	exit(1);						\
     80 }								\
     81 								\
     82 void								\
     83 prefix##_warn_errno(const char *format, ...) {			\
     84 	va_list args;						\
     85 	char *errstr = strerror(errno);				\
     86 	va_start(args, format);					\
     87 	log_func("Warning", format, args);			\
     88 	va_end(args);						\
     89 	prefix##_warn("system error: %s\n", errstr);		\
     90 }								\
     91 								\
     92 void								\
     93 prefix##_fatal_errno(const char *format, ...) {			\
     94 	va_list args;						\
     95 	char *errstr = strerror(errno);				\
     96 	va_start(args, format);					\
     97 	log_func("Fatal", format, args);			\
     98 	va_end(args);						\
     99 	prefix##_fatal("system error: %s\n", errstr);		\
    100 }
    101 
    102 LTK_GEN_LOG_FUNC_PROTO(ltk)
    103 
    104 #endif /* LTK_UTIL_H */