OLD | NEW |
1 /////////////////////////////////////////////////////////////////////////////// | 1 /////////////////////////////////////////////////////////////////////////////// |
2 // | 2 // |
3 /// \file util.h | 3 /// \file util.h |
4 /// \brief Miscellaneous utility functions | 4 /// \brief Miscellaneous utility functions |
5 // | 5 // |
6 // Author: Lasse Collin | 6 // Author: Lasse Collin |
7 // | 7 // |
8 // This file has been put into the public domain. | 8 // This file has been put into the public domain. |
9 // You can do whatever you want with this file. | 9 // You can do whatever you want with this file. |
10 // | 10 // |
11 /////////////////////////////////////////////////////////////////////////////// | 11 /////////////////////////////////////////////////////////////////////////////// |
12 | 12 |
13 /// \brief Safe malloc() that never returns NULL | 13 /// \brief Safe malloc() that never returns NULL |
14 /// | 14 /// |
15 /// \note xmalloc(), xrealloc(), and xstrdup() must not be used when | 15 /// \note xmalloc(), xrealloc(), and xstrdup() must not be used when |
16 /// there are files open for writing, that should be cleaned up | 16 /// there are files open for writing, that should be cleaned up |
17 /// before exiting. | 17 /// before exiting. |
18 #define xmalloc(size) xrealloc(NULL, size) | 18 #define xmalloc(size) xrealloc(NULL, size) |
19 | 19 |
20 | 20 |
21 /// \brief Safe realloc() that never returns NULL | 21 /// \brief Safe realloc() that never returns NULL |
22 extern void *xrealloc(void *ptr, size_t size); | 22 extern void *xrealloc(void *ptr, size_t size) |
| 23 » » lzma_attribute((__malloc__)) lzma_attr_alloc_size(2); |
23 | 24 |
24 | 25 |
25 /// \brief Safe strdup() that never returns NULL | 26 /// \brief Safe strdup() that never returns NULL |
26 extern char *xstrdup(const char *src); | 27 extern char *xstrdup(const char *src) lzma_attribute((__malloc__)); |
27 | 28 |
28 | 29 |
29 /// \brief Fancy version of strtoull() | 30 /// \brief Fancy version of strtoull() |
30 /// | 31 /// |
31 /// \param name Name of the option to show in case of an error | 32 /// \param name Name of the option to show in case of an error |
32 /// \param value String containing the number to be parsed; may | 33 /// \param value String containing the number to be parsed; may |
33 /// contain suffixes "k", "M", "G", "Ki", "Mi", or "Gi" | 34 /// contain suffixes "k", "M", "G", "Ki", "Mi", or "Gi" |
34 /// \param min Minimum valid value | 35 /// \param min Minimum valid value |
35 /// \param max Maximum valid value | 36 /// \param max Maximum valid value |
36 /// | 37 /// |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 /// \return Pointer to statically allocated buffer containing the string. | 90 /// \return Pointer to statically allocated buffer containing the string. |
90 /// | 91 /// |
91 /// \note This uses double_to_str() internally so the static buffer | 92 /// \note This uses double_to_str() internally so the static buffer |
92 /// in double_to_str() will be overwritten. | 93 /// in double_to_str() will be overwritten. |
93 /// | 94 /// |
94 extern const char *uint64_to_nicestr(uint64_t value, | 95 extern const char *uint64_to_nicestr(uint64_t value, |
95 enum nicestr_unit unit_min, enum nicestr_unit unit_max, | 96 enum nicestr_unit unit_min, enum nicestr_unit unit_max, |
96 bool always_also_bytes, uint32_t slot); | 97 bool always_also_bytes, uint32_t slot); |
97 | 98 |
98 | 99 |
99 /// \brief Convert double to a string with one decimal place | |
100 /// | |
101 /// This is like uint64_to_str() except that this converts a double and | |
102 /// uses exactly one decimal place. | |
103 extern const char *double_to_str(double value); | |
104 | |
105 | |
106 /// \brief Wrapper for snprintf() to help constructing a string in pieces | 100 /// \brief Wrapper for snprintf() to help constructing a string in pieces |
107 /// | 101 /// |
108 /// A maximum of *left bytes is written starting from *pos. *pos and *left | 102 /// A maximum of *left bytes is written starting from *pos. *pos and *left |
109 /// are updated accordingly. | 103 /// are updated accordingly. |
110 extern void my_snprintf(char **pos, size_t *left, const char *fmt, ...) | 104 extern void my_snprintf(char **pos, size_t *left, const char *fmt, ...) |
111 » » lzma_attribute((format(printf, 3, 4))); | 105 » » lzma_attribute((__format__(__printf__, 3, 4))); |
112 | 106 |
113 | 107 |
114 /// \brief Check if filename is empty and print an error message | 108 /// \brief Check if filename is empty and print an error message |
115 extern bool is_empty_filename(const char *filename); | 109 extern bool is_empty_filename(const char *filename); |
116 | 110 |
117 | 111 |
118 /// \brief Test if stdin is a terminal | 112 /// \brief Test if stdin is a terminal |
119 /// | 113 /// |
120 /// If stdin is a terminal, an error message is printed and exit status set | 114 /// If stdin is a terminal, an error message is printed and exit status set |
121 /// to EXIT_ERROR. | 115 /// to EXIT_ERROR. |
122 extern bool is_tty_stdin(void); | 116 extern bool is_tty_stdin(void); |
123 | 117 |
124 | 118 |
125 /// \brief Test if stdout is a terminal | 119 /// \brief Test if stdout is a terminal |
126 /// | 120 /// |
127 /// If stdout is a terminal, an error message is printed and exit status set | 121 /// If stdout is a terminal, an error message is printed and exit status set |
128 /// to EXIT_ERROR. | 122 /// to EXIT_ERROR. |
129 extern bool is_tty_stdout(void); | 123 extern bool is_tty_stdout(void); |
OLD | NEW |