annotate libsci/util.h @ 50:b474f0985e39

scictl: add API key support
author David Demelier <markand@malikania.fr>
date Wed, 17 Aug 2022 09:11:58 +0200
parents e52c762d8ba8
children 319979427566
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * util.h -- miscellaneous utilities
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
32
081e1c258e64 misc: update copyright years
David Demelier <markand@malikania.fr>
parents: 30
diff changeset
4 * Copyright (c) 2021-2022 David Demelier <markand@malikania.fr>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
19 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
20 * \file util.h
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
21 * \brief Miscellaneous utilities.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
22 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
23 * Most of the allocations functions will exit with code 1 on memory
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
24 * exhaustion.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
25 */
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
26
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 #ifndef SCI_UTIL_H
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 #define SCI_UTIL_H
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
29
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 #include <stddef.h>
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
31 #include <stdio.h>
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
33 #include <jansson.h>
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
34
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
35 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
36 * Compute fixed size array length.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
37 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 #define UTIL_SIZE(x) (sizeof (x) / sizeof (x[0]))
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
40 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
41 * Wrap malloc or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
42 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
43 * \param w the bytes to allocate
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
44 * \return the pointer to the memory
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
45 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 void *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
47 util_malloc(size_t w);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
48
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
49 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
50 * Wrap calloc or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
51 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
52 * \param n the number of items
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
53 * \param w the bytes per item
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
54 * \return the pointer to the memory
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
55 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 void *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
57 util_calloc(size_t n, size_t w);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
58
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
59 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
60 * Wrap realloc or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
61 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
62 * \param ptr the old memory
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
63 * \param w the bytes to allocate
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
64 * \return the pointer to the memory
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
65 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 void *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
67 util_realloc(void *ptr, size_t w);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
69 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
70 * Wrap reallocarray or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
71 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
72 * \param ptr the old memory
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
73 * \param n the number of items
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
74 * \param w the bytes per item
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
75 * \return the pointer to the memory
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
76 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
77 void *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
78 util_reallocarray(void *ptr, size_t n, size_t w);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
79
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
80 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
81 * Wrap strdup or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
82 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
83 * \pre str != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
84 * \param str the string to duplicate
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
85 * \return the copied string
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
86 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
87 char *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
88 util_strdup(const char *str);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
89
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
90 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
91 * Wrap strndup or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
92 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
93 * \pre str != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
94 * \param str the string to duplicate
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
95 * \param n the maximum string to not exceed
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
96 * \return the copied string
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
97 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
98 char *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
99 util_strndup(const char *str, size_t n);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
101 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
102 * Get the base name component from a path.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
103 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
104 * \pre path != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
105 * \param path the path to extract
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
106 * \return a static thread local value containing the base name
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
107 */
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 char *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
109 util_basename(const char *path);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
110
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
111 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
112 * Get the directory name component from a path.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
113 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
114 * \pre path != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
115 * \param path the path to extract
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
116 * \return a static thread local value containing the directory name
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
117 */
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
118 char *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
119 util_dirname(const char *path);
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
120
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
121 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
122 * Wrap open_memstream or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
123 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
124 * \pre out != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
125 * \pre outsz != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
126 * \param out the destination string
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
127 * \param outsz the destination string length
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
128 * \return a non-NULL file pointer
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
129 */
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
130 FILE *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
131 util_open_memstream(char **out, size_t *outsz);
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
132
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
133 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
134 * Read the whole content from the given file.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
135 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
136 * \pre path != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
137 * \param path the file to read
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
138 * \return the file content or NULL on error (and errno is set)
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
139 */
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
140 char *
3
215c0c3b3609 misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents: 2
diff changeset
141 util_read(const char *);
1
5afdb14df924 sci: add support for storing results
David Demelier <markand@malikania.fr>
parents: 0
diff changeset
142
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
143 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
144 * Write an error message to error output and exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
145 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
146 * \pre fmt != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
147 * \param fmt the format string
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
148 */
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
149 void
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
150 util_die(const char *fmt, ...);
19
de4bf839b565 misc: revamp SQL
David Demelier <markand@malikania.fr>
parents: 18
diff changeset
151
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
152 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
153 * Wrap json_pack or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
154 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
155 * \pre fmt != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
156 * \param fmt the json_pack format string and its arguments
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
157 * \return a non-NULL JSON document
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
158 */
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
159 json_t *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
160 util_json_pack(const char *fmt, ...);
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
161
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
162 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
163 * Wrap json_dump or exit with code 1.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
164 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
165 * \pre json != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
166 * \param json the JSON value to transform to string
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
167 */
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
168 char *
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
169 util_json_dump(const json_t *json);
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
170
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
171 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
172 * OpenBSD strlcpy extension builtin.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
173 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
174 * \pre dst != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
175 * \pre src != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
176 * \param dst the destination string
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
177 * \param src the source string
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
178 * \param size the maximum size in dst
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
179 * \return the number of bytes written
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
180 */
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
181 size_t
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
182 util_strlcpy(char *dst, const char *src, size_t size);
30
43333d18e4b8 scid: document theme
David Demelier <markand@malikania.fr>
parents: 22
diff changeset
183
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
184 /**
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
185 * OpenBSD strtonum extension builtin.
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
186 *
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
187 * \pre str != NULL
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
188 * \param str the string to convert
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
189 * \param min the lower bound (included)
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
190 * \param max the upper bound (included)
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
191 * \param errstr the error string pointer to be set on error (not dynamically allocated)
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
192 * \return the converted value
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
193 */
22
dd078aea5d02 misc: use project/worker name as primary key
David Demelier <markand@malikania.fr>
parents: 20
diff changeset
194 long long
34
e52c762d8ba8 misc: cleanups
David Demelier <markand@malikania.fr>
parents: 33
diff changeset
195 util_strtonum(const char *str, long long min, long long max, const char **errstr);
22
dd078aea5d02 misc: use project/worker name as primary key
David Demelier <markand@malikania.fr>
parents: 20
diff changeset
196
0
f1de39079243 misc: initial import
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 #endif /* !SCI_UTIL_H */