Mercurial > sci
annotate libsci/util.h @ 85:cf49ab595e2e default tip @
sciworkerd: avoid spawning several tasks
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 09 Mar 2023 10:43:48 +0100 |
parents | 71cd8447e3a4 |
children |
rev | line source |
---|---|
0 | 1 /* |
2 * util.h -- miscellaneous utilities | |
3 * | |
80
71cd8447e3a4
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
63
diff
changeset
|
4 * Copyright (c) 2021-2023 David Demelier <markand@malikania.fr> |
0 | 5 * |
6 * Permission to use, copy, modify, and/or distribute this software for any | |
7 * purpose with or without fee is hereby granted, provided that the above | |
8 * copyright notice and this permission notice appear in all copies. | |
9 * | |
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
17 */ | |
18 | |
34 | 19 /** |
20 * \file util.h | |
21 * \brief Miscellaneous utilities. | |
22 * | |
23 * Most of the allocations functions will exit with code 1 on memory | |
24 * exhaustion. | |
25 */ | |
26 | |
0 | 27 #ifndef SCI_UTIL_H |
28 #define SCI_UTIL_H | |
29 | |
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 | 32 |
30 | 33 #include <jansson.h> |
34 | |
34 | 35 /** |
36 * Compute fixed size array length. | |
37 */ | |
0 | 38 #define UTIL_SIZE(x) (sizeof (x) / sizeof (x[0])) |
39 | |
34 | 40 /** |
41 * Wrap calloc or exit with code 1. | |
42 * | |
43 * \param n the number of items | |
44 * \param w the bytes per item | |
45 * \return the pointer to the memory | |
46 */ | |
0 | 47 void * |
34 | 48 util_calloc(size_t n, size_t w); |
0 | 49 |
34 | 50 /** |
51 * Wrap strdup or exit with code 1. | |
52 * | |
53 * \pre str != NULL | |
54 * \param str the string to duplicate | |
55 * \return the copied string | |
56 */ | |
0 | 57 char * |
34 | 58 util_strdup(const char *str); |
0 | 59 |
34 | 60 /** |
61 * Get the base name component from a path. | |
62 * | |
63 * \pre path != NULL | |
64 * \param path the path to extract | |
65 * \return a static thread local value containing the base name | |
66 */ | |
0 | 67 char * |
34 | 68 util_basename(const char *path); |
0 | 69 |
34 | 70 /** |
71 * Wrap open_memstream or exit with code 1. | |
72 * | |
73 * \pre out != NULL | |
74 * \pre outsz != NULL | |
75 * \param out the destination string | |
76 * \param outsz the destination string length | |
77 * \return a non-NULL file pointer | |
78 */ | |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
79 FILE * |
34 | 80 util_open_memstream(char **out, size_t *outsz); |
0 | 81 |
34 | 82 /** |
83 * Read the whole content from the given file. | |
84 * | |
85 * \pre path != NULL | |
86 * \param path the file to read | |
87 * \return the file content or NULL on error (and errno is set) | |
88 */ | |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
89 char * |
3
215c0c3b3609
misc: use JSON everywhere (scictl/sciwebd)
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
90 util_read(const char *); |
1
5afdb14df924
sci: add support for storing results
David Demelier <markand@malikania.fr>
parents:
0
diff
changeset
|
91 |
34 | 92 /** |
93 * Write an error message to error output and exit with code 1. | |
94 * | |
95 * \pre fmt != NULL | |
96 * \param fmt the format string | |
97 */ | |
19 | 98 void |
34 | 99 util_die(const char *fmt, ...); |
19 | 100 |
34 | 101 /** |
102 * Wrap json_pack or exit with code 1. | |
103 * | |
104 * \pre fmt != NULL | |
105 * \param fmt the json_pack format string and its arguments | |
106 * \return a non-NULL JSON document | |
107 */ | |
30 | 108 json_t * |
34 | 109 util_json_pack(const char *fmt, ...); |
30 | 110 |
34 | 111 /** |
112 * Wrap json_dump or exit with code 1. | |
113 * | |
114 * \pre json != NULL | |
115 * \param json the JSON value to transform to string | |
116 */ | |
30 | 117 char * |
34 | 118 util_json_dump(const json_t *json); |
30 | 119 |
34 | 120 /** |
121 * OpenBSD strlcpy extension builtin. | |
122 * | |
123 * \pre dst != NULL | |
124 * \pre src != NULL | |
125 * \param dst the destination string | |
126 * \param src the source string | |
127 * \param size the maximum size in dst | |
128 * \return the number of bytes written | |
129 */ | |
30 | 130 size_t |
34 | 131 util_strlcpy(char *dst, const char *src, size_t size); |
30 | 132 |
34 | 133 /** |
134 * OpenBSD strtonum extension builtin. | |
135 * | |
136 * \pre str != NULL | |
137 * \param str the string to convert | |
138 * \param min the lower bound (included) | |
139 * \param max the upper bound (included) | |
140 * \param errstr the error string pointer to be set on error (not dynamically allocated) | |
141 * \return the converted value | |
142 */ | |
22
dd078aea5d02
misc: use project/worker name as primary key
David Demelier <markand@malikania.fr>
parents:
20
diff
changeset
|
143 long long |
34 | 144 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
|
145 |
53
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
146 /** |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
147 * Wrap getopt(3) but handle invalid option or missing value with a predefined |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
148 * message. |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
149 * |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
150 * \param argc number of arguments |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
151 * \param argv arguments |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
152 * \param optstring the string format |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
153 * \return option or -1 when complete |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
154 */ |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
155 int |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
156 util_getopt(int argc, char * const *argv, const char *optstring); |
319979427566
misc: refactor using util_getopt
David Demelier <markand@malikania.fr>
parents:
34
diff
changeset
|
157 |
0 | 158 #endif /* !SCI_UTIL_H */ |