URI: 
       txtbuf.h - ltk - GUI toolkit for X11 (WIP)
  HTML git clone git://lumidify.org/ltk.git (fast, but not encrypted)
  HTML git clone https://lumidify.org/ltk.git (encrypted, but very slow)
  HTML git clone git://4kcetb7mo7hj6grozzybxtotsub5bempzo4lirzc3437amof2c2impyd.onion/ltk.git (over tor)
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       txtbuf.h (3527B)
       ---
            1 /*
            2  * Copyright (c) 2022-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_TXTBUF_H
           18 #define LTK_TXTBUF_H
           19 
           20 #include <stddef.h>
           21 
           22 /*
           23  * txtbuf is really just a string data type that is badly named.
           24  * The stored text is always nul-terminated.
           25  * FIXME: this data type is abused in some places and manually
           26  * created so it isn't nul-terminated
           27  */
           28 
           29 typedef struct {
           30         size_t len, cap;
           31         char *text;
           32 } txtbuf;
           33 
           34 /*
           35  * Create an empty txtbuf.
           36  */
           37 txtbuf *txtbuf_new(void);
           38 
           39 /*
           40  * Create a new txtbuf, initializing it with the nul-terminated
           41  * string 'str'. The input string is copied.
           42  */
           43 txtbuf *txtbuf_new_from_char(const char *str);
           44 
           45 /*
           46  * Create a new txtbuf, initializing it with the string 'str'
           47  * of length 'len'. The input string is copied.
           48  */
           49 txtbuf *txtbuf_new_from_char_len(const char *str, size_t len);
           50 
           51 /*
           52  * Replace the stored text in 'buf' with the text generated by
           53  * 'snprintf' when called with the given format string and args.
           54  */
           55 void txtbuf_fmt(txtbuf *buf, const char *fmt, ...);
           56 
           57 /*
           58  * Replace the stored text in 'buf' with 'text'.
           59  */
           60 void txtbuf_set_text(txtbuf *buf, const char *text);
           61 
           62 /*
           63  * Same as txtbuf_set_text, but with explicit length for 'text'.
           64  */
           65 void txtbuf_set_textn(txtbuf *buf, const char *text, size_t len);
           66 
           67 /*
           68  * Append 'text' to the text stored in 'buf'.
           69  */
           70 void txtbuf_append(txtbuf *buf, const char *text);
           71 
           72 /*
           73  * Same as txtbuf_append, but with explicit length for 'text'.
           74  */
           75 void txtbuf_appendn(txtbuf *buf, const char *text, size_t len);
           76 
           77 /*
           78  * Compare the text of two txtbuf's like 'strcmp'.
           79  */
           80 int txtbuf_cmp(txtbuf *buf1, txtbuf *buf2);
           81 
           82 /*
           83  * Convenience function for calling 'txtbuf_cmp' and checking if the
           84  * return value is 0, i.e. the strings are equal.
           85  */
           86 int txtbuf_eql(txtbuf *buf1, txtbuf *buf2);
           87 
           88 /*
           89  * Make sure the txtbuf has space for at least the given size,
           90  * plus '\0' at the end.
           91  */
           92 void txtbuf_resize(txtbuf *buf, size_t sz);
           93 
           94 /*
           95  * Destroy a txtbuf.
           96  */
           97 void txtbuf_destroy(txtbuf *buf);
           98 
           99 /*
          100  * Copy txtbuf 'src' to txtbuf 'dst'.
          101  */
          102 void txtbuf_copy(txtbuf *dst, txtbuf *src);
          103 
          104 /*
          105  * Duplicate txtbuf 'src'.
          106  */
          107 txtbuf *txtbuf_dup(txtbuf *src);
          108 
          109 /*
          110  * Get copy of text stored in 'buf'.
          111  * The returned text belongs to the caller and needs to be freed.
          112  */
          113 char *txtbuf_get_textcopy(txtbuf *buf);
          114 
          115 /*
          116  * Get text stored in 'buf'.
          117  * The returned text belongs to the txtbuf and must not be changed.
          118  * The returned text may be invalidated as soon as any other
          119  * functions are called on the txtbuf.
          120  */
          121 const char *txtbuf_get_text(txtbuf *buf);
          122 
          123 /*
          124  * Get the length of the text stored in 'buf'.
          125  */
          126 size_t txtbuf_len(txtbuf *buf);
          127 
          128 /*
          129  * Clear the text, but do not reduce the internal capacity
          130  * (for efficiency if it will be filled up again anyways).
          131  */
          132 void txtbuf_clear(txtbuf *buf);
          133 
          134 #endif /* LTK_TXTBUF_H */