]> git.proxmox.com Git - mirror_ovs.git/blame - lib/util.c
run-ryu: Use unix socket rather than patch ports
[mirror_ovs.git] / lib / util.c
CommitLineData
064af421 1/*
2fec66db 2 * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
064af421 3 *
a14bc59f
BP
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
064af421 7 *
a14bc59f
BP
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
064af421
BP
15 */
16
17#include <config.h>
18#include "util.h"
ed2232fc 19#include <ctype.h>
064af421 20#include <errno.h>
711e0157 21#include <limits.h>
5fcbed74 22#include <pthread.h>
064af421 23#include <stdarg.h>
711e0157 24#include <stdint.h>
064af421
BP
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
fee0c963 28#include <sys/stat.h>
daf03c53 29#include <unistd.h>
ed2232fc 30#include "bitmap.h"
ddc4f8e2 31#include "byte-order.h"
064af421 32#include "coverage.h"
275eebb9 33#include "ovs-rcu.h"
728a8b14 34#include "ovs-thread.h"
daf03c53 35#include "vlog.h"
1805ee4b
EM
36#ifdef HAVE_PTHREAD_SET_NAME_NP
37#include <pthread_np.h>
38#endif
daf03c53 39
d98e6007 40VLOG_DEFINE_THIS_MODULE(util);
5136ce49 41
d76f09ea
BP
42COVERAGE_DEFINE(util_xalloc);
43
781dee08 44/* argv[0] without directory names. */
064af421 45const char *program_name;
781dee08 46
bc9fb3a9
BP
47/* Name for the currently running thread or process, for log messages, process
48 * listings, and debuggers. */
49DEFINE_PER_THREAD_MALLOCED_DATA(char *, subprogram_name);
781dee08
BP
50
51/* --version option output. */
55d5bb44 52static char *program_version;
064af421 53
315ea327 54/* Buffer used by ovs_strerror() and ovs_format_message(). */
2ba4f163
BP
55DEFINE_STATIC_PER_THREAD_DATA(struct { char s[128]; },
56 strerror_buffer,
57 { "" });
5fcbed74 58
ac01d085
GS
59static char *xreadlink(const char *filename);
60
4749f73d
BP
61void
62ovs_assert_failure(const char *where, const char *function,
63 const char *condition)
64{
65 /* Prevent an infinite loop (or stack overflow) in case VLOG_ABORT happens
66 * to trigger an assertion failure of its own. */
67 static int reentry = 0;
68
69 switch (reentry++) {
70 case 0:
71 VLOG_ABORT("%s: assertion %s failed in %s()",
72 where, condition, function);
428b2edd 73 OVS_NOT_REACHED();
4749f73d
BP
74
75 case 1:
76 fprintf(stderr, "%s: assertion %s failed in %s()",
77 where, condition, function);
78 abort();
79
80 default:
81 abort();
82 }
83}
84
064af421 85void
d295e8e9 86out_of_memory(void)
064af421 87{
c1c8308a 88 ovs_abort(0, "virtual memory exhausted");
064af421
BP
89}
90
91void *
d295e8e9 92xcalloc(size_t count, size_t size)
064af421
BP
93{
94 void *p = count && size ? calloc(count, size) : malloc(1);
95 COVERAGE_INC(util_xalloc);
96 if (p == NULL) {
97 out_of_memory();
98 }
99 return p;
100}
101
ec6fde61
BP
102void *
103xzalloc(size_t size)
104{
105 return xcalloc(1, size);
106}
107
064af421 108void *
d295e8e9 109xmalloc(size_t size)
064af421
BP
110{
111 void *p = malloc(size ? size : 1);
112 COVERAGE_INC(util_xalloc);
113 if (p == NULL) {
114 out_of_memory();
115 }
116 return p;
117}
118
119void *
d295e8e9 120xrealloc(void *p, size_t size)
064af421
BP
121{
122 p = realloc(p, size ? size : 1);
123 COVERAGE_INC(util_xalloc);
124 if (p == NULL) {
125 out_of_memory();
126 }
127 return p;
128}
129
130void *
131xmemdup(const void *p_, size_t size)
132{
133 void *p = xmalloc(size);
134 memcpy(p, p_, size);
135 return p;
136}
137
138char *
139xmemdup0(const char *p_, size_t length)
140{
141 char *p = xmalloc(length + 1);
142 memcpy(p, p_, length);
143 p[length] = '\0';
144 return p;
145}
146
147char *
d295e8e9 148xstrdup(const char *s)
064af421
BP
149{
150 return xmemdup0(s, strlen(s));
151}
152
153char *
154xvasprintf(const char *format, va_list args)
155{
156 va_list args2;
157 size_t needed;
158 char *s;
159
160 va_copy(args2, args);
161 needed = vsnprintf(NULL, 0, format, args);
162
163 s = xmalloc(needed + 1);
164
165 vsnprintf(s, needed + 1, format, args2);
166 va_end(args2);
167
168 return s;
169}
170
171void *
172x2nrealloc(void *p, size_t *n, size_t s)
173{
174 *n = *n == 0 ? 1 : 2 * *n;
175 return xrealloc(p, *n * s);
176}
177
2fec66db
BP
178/* The desired minimum alignment for an allocated block of memory. */
179#define MEM_ALIGN MAX(sizeof(void *), 8)
180BUILD_ASSERT_DECL(IS_POW2(MEM_ALIGN));
181BUILD_ASSERT_DECL(CACHE_LINE_SIZE >= MEM_ALIGN);
182
183/* Allocates and returns 'size' bytes of memory in dedicated cache lines. That
184 * is, the memory block returned will not share a cache line with other data,
185 * avoiding "false sharing". (The memory returned will not be at the start of
186 * a cache line, though, so don't assume such alignment.)
187 *
188 * Use free_cacheline() to free the returned memory block. */
189void *
190xmalloc_cacheline(size_t size)
191{
192 void **payload;
193 void *base;
194
195 /* Allocate room for:
196 *
197 * - Up to CACHE_LINE_SIZE - 1 bytes before the payload, so that the
198 * start of the payload doesn't potentially share a cache line.
199 *
200 * - A payload consisting of a void *, followed by padding out to
201 * MEM_ALIGN bytes, followed by 'size' bytes of user data.
202 *
203 * - Space following the payload up to the end of the cache line, so
204 * that the end of the payload doesn't potentially share a cache line
205 * with some following block. */
206 base = xmalloc((CACHE_LINE_SIZE - 1)
207 + ROUND_UP(MEM_ALIGN + size, CACHE_LINE_SIZE));
208
209 /* Locate the payload and store a pointer to the base at the beginning. */
210 payload = (void **) ROUND_UP((uintptr_t) base, CACHE_LINE_SIZE);
211 *payload = base;
212
213 return (char *) payload + MEM_ALIGN;
214}
215
216/* Like xmalloc_cacheline() but clears the allocated memory to all zero
217 * bytes. */
218void *
219xzalloc_cacheline(size_t size)
220{
221 void *p = xmalloc_cacheline(size);
222 memset(p, 0, size);
223 return p;
224}
225
226/* Frees a memory block allocated with xmalloc_cacheline() or
227 * xzalloc_cacheline(). */
228void
229free_cacheline(void *p)
230{
231 if (p) {
232 free(*(void **) ((uintptr_t) p - MEM_ALIGN));
233 }
234}
235
064af421
BP
236char *
237xasprintf(const char *format, ...)
238{
239 va_list args;
240 char *s;
241
242 va_start(args, format);
243 s = xvasprintf(format, args);
244 va_end(args);
245
246 return s;
247}
248
e868fb3d
BP
249/* Similar to strlcpy() from OpenBSD, but it never reads more than 'size - 1'
250 * bytes from 'src' and doesn't return anything. */
064af421
BP
251void
252ovs_strlcpy(char *dst, const char *src, size_t size)
253{
254 if (size > 0) {
e868fb3d
BP
255 size_t len = strnlen(src, size - 1);
256 memcpy(dst, src, len);
257 dst[len] = '\0';
064af421
BP
258 }
259}
260
71d7c22f
BP
261/* Copies 'src' to 'dst'. Reads no more than 'size - 1' bytes from 'src'.
262 * Always null-terminates 'dst' (if 'size' is nonzero), and writes a zero byte
263 * to every otherwise unused byte in 'dst'.
264 *
265 * Except for performance, the following call:
266 * ovs_strzcpy(dst, src, size);
267 * is equivalent to these two calls:
268 * memset(dst, '\0', size);
269 * ovs_strlcpy(dst, src, size);
270 *
271 * (Thus, ovs_strzcpy() is similar to strncpy() without some of the pitfalls.)
272 */
273void
274ovs_strzcpy(char *dst, const char *src, size_t size)
275{
276 if (size > 0) {
277 size_t len = strnlen(src, size - 1);
278 memcpy(dst, src, len);
279 memset(dst + len, '\0', size - len);
280 }
281}
282
c1c8308a
BP
283/* Prints 'format' on stderr, formatting it like printf() does. If 'err_no' is
284 * nonzero, then it is formatted with ovs_retval_to_string() and appended to
285 * the message inside parentheses. Then, terminates with abort().
286 *
287 * This function is preferred to ovs_fatal() in a situation where it would make
288 * sense for a monitoring process to restart the daemon.
289 *
290 * 'format' should not end with a new-line, because this function will add one
291 * itself. */
292void
293ovs_abort(int err_no, const char *format, ...)
294{
295 va_list args;
296
297 va_start(args, format);
d41d4b71
BP
298 ovs_abort_valist(err_no, format, args);
299}
c1c8308a 300
d41d4b71
BP
301/* Same as ovs_abort() except that the arguments are supplied as a va_list. */
302void
303ovs_abort_valist(int err_no, const char *format, va_list args)
304{
305 ovs_error_valist(err_no, format, args);
c1c8308a
BP
306 abort();
307}
308
309/* Prints 'format' on stderr, formatting it like printf() does. If 'err_no' is
310 * nonzero, then it is formatted with ovs_retval_to_string() and appended to
311 * the message inside parentheses. Then, terminates with EXIT_FAILURE.
312 *
313 * 'format' should not end with a new-line, because this function will add one
314 * itself. */
064af421
BP
315void
316ovs_fatal(int err_no, const char *format, ...)
317{
318 va_list args;
319
064af421 320 va_start(args, format);
fcaddd4d
BP
321 ovs_fatal_valist(err_no, format, args);
322}
064af421 323
fcaddd4d
BP
324/* Same as ovs_fatal() except that the arguments are supplied as a va_list. */
325void
326ovs_fatal_valist(int err_no, const char *format, va_list args)
327{
328 ovs_error_valist(err_no, format, args);
064af421
BP
329 exit(EXIT_FAILURE);
330}
331
c1c8308a
BP
332/* Prints 'format' on stderr, formatting it like printf() does. If 'err_no' is
333 * nonzero, then it is formatted with ovs_retval_to_string() and appended to
334 * the message inside parentheses.
335 *
336 * 'format' should not end with a new-line, because this function will add one
337 * itself. */
064af421
BP
338void
339ovs_error(int err_no, const char *format, ...)
340{
064af421
BP
341 va_list args;
342
064af421 343 va_start(args, format);
c1c8308a 344 ovs_error_valist(err_no, format, args);
064af421 345 va_end(args);
c1c8308a
BP
346}
347
348/* Same as ovs_error() except that the arguments are supplied as a va_list. */
349void
350ovs_error_valist(int err_no, const char *format, va_list args)
351{
bc9fb3a9 352 const char *subprogram_name = get_subprogram_name();
c1c8308a
BP
353 int save_errno = errno;
354
781dee08
BP
355 if (subprogram_name[0]) {
356 fprintf(stderr, "%s(%s): ", program_name, subprogram_name);
357 } else {
358 fprintf(stderr, "%s: ", program_name);
359 }
360
c1c8308a 361 vfprintf(stderr, format, args);
0fec26b0 362 if (err_no != 0) {
c18ea70d 363 fprintf(stderr, " (%s)", ovs_retval_to_string(err_no));
0fec26b0 364 }
064af421
BP
365 putc('\n', stderr);
366
367 errno = save_errno;
368}
369
c18ea70d
AE
370/* Many OVS functions return an int which is one of:
371 * - 0: no error yet
372 * - >0: errno value
373 * - EOF: end of file (not necessarily an error; depends on the function called)
374 *
375 * Returns the appropriate human-readable string. The caller must copy the
376 * string if it wants to hold onto it, as the storage may be overwritten on
377 * subsequent function calls.
378 */
379const char *
380ovs_retval_to_string(int retval)
381{
5fcbed74
BP
382 return (!retval ? ""
383 : retval == EOF ? "End of file"
384 : ovs_strerror(retval));
385}
c18ea70d 386
b26f46a4
GS
387/* This function returns the string describing the error number in 'error'
388 * for POSIX platforms. For Windows, this function can be used for C library
389 * calls. For socket calls that are also used in Windows, use sock_strerror()
390 * instead. For WINAPI calls, look at ovs_lasterror_to_string(). */
5fcbed74
BP
391const char *
392ovs_strerror(int error)
393{
394 enum { BUFSIZE = sizeof strerror_buffer_get()->s };
395 int save_errno;
396 char *buffer;
397 char *s;
398
399 save_errno = errno;
400 buffer = strerror_buffer_get()->s;
401
402#if STRERROR_R_CHAR_P
403 /* GNU style strerror_r() might return an immutable static string, or it
404 * might write and return 'buffer', but in either case we can pass the
405 * returned string directly to the caller. */
406 s = strerror_r(error, buffer, BUFSIZE);
407#else /* strerror_r() returns an int. */
408 s = buffer;
409 if (strerror_r(error, buffer, BUFSIZE)) {
410 /* strerror_r() is only allowed to fail on ERANGE (because the buffer
411 * is too short). We don't check the actual failure reason because
412 * POSIX requires strerror_r() to return the error but old glibc
413 * (before 2.13) returns -1 and sets errno. */
5865a8af 414 snprintf(buffer, BUFSIZE, "Unknown error %d", error);
c18ea70d 415 }
5fcbed74
BP
416#endif
417
418 errno = save_errno;
419
420 return s;
c18ea70d
AE
421}
422
55d5bb44
JP
423/* Sets global "program_name" and "program_version" variables. Should
424 * be called at the beginning of main() with "argv[0]" as the argument
425 * to 'argv0'.
426 *
e385ef55
EJ
427 * 'version' should contain the version of the caller's program. If 'version'
428 * is the same as the VERSION #define, the caller is assumed to be part of Open
429 * vSwitch. Otherwise, it is assumed to be an external program linking against
430 * the Open vSwitch libraries.
431 *
55d5bb44
JP
432 * The 'date' and 'time' arguments should likely be called with
433 * "__DATE__" and "__TIME__" to use the time the binary was built.
434 * Alternatively, the "set_program_name" macro may be called to do this
435 * automatically.
436 */
437void
e385ef55
EJ
438set_program_name__(const char *argv0, const char *version, const char *date,
439 const char *time)
064af421 440{
ed596d3a
GS
441#ifdef _WIN32
442 char *basename;
443 size_t max_len = strlen(argv0) + 1;
fda546bd
GS
444
445 if (program_name) {
446 return;
447 }
ed596d3a
GS
448 basename = xmalloc(max_len);
449 _splitpath_s(argv0, NULL, 0, NULL, 0, basename, max_len, NULL, 0);
450 assert_single_threaded();
451 program_name = basename;
452#else
064af421 453 const char *slash = strrchr(argv0, '/');
728a8b14 454 assert_single_threaded();
064af421 455 program_name = slash ? slash + 1 : argv0;
ed596d3a 456#endif
55d5bb44
JP
457
458 free(program_version);
e385ef55
EJ
459
460 if (!strcmp(version, VERSION)) {
461 program_version = xasprintf("%s (Open vSwitch) "VERSION"\n"
462 "Compiled %s %s\n",
463 program_name, date, time);
464 } else {
465 program_version = xasprintf("%s %s\n"
466 "Open vSwitch Library "VERSION"\n"
467 "Compiled %s %s\n",
468 program_name, version, date, time);
469 }
55d5bb44
JP
470}
471
bc9fb3a9
BP
472/* Returns the name of the currently running thread or process. */
473const char *
474get_subprogram_name(void)
475{
476 const char *name = subprogram_name_get();
477 return name ? name : "";
478}
479
d710edc4
BP
480/* Sets the formatted value of 'format' as the name of the currently running
481 * thread or process. (This appears in log messages and may also be visible in
482 * system process listings and debuggers.) */
bc9fb3a9 483void
d710edc4 484set_subprogram_name(const char *format, ...)
bc9fb3a9 485{
d710edc4
BP
486 char *pname;
487
488 if (format) {
489 va_list args;
490
491 va_start(args, format);
492 pname = xvasprintf(format, args);
493 va_end(args);
494 } else {
495 pname = xstrdup(program_name);
496 }
497
498 free(subprogram_name_set(pname));
499
8a8cd0ac 500#if HAVE_GLIBC_PTHREAD_SETNAME_NP
e584f6a8 501 pthread_setname_np(pthread_self(), pname);
8a8cd0ac 502#elif HAVE_NETBSD_PTHREAD_SETNAME_NP
e584f6a8 503 pthread_setname_np(pthread_self(), "%s", pname);
0f13e650 504#elif HAVE_PTHREAD_SET_NAME_NP
e584f6a8 505 pthread_set_name_np(pthread_self(), pname);
0f13e650 506#endif
bc9fb3a9
BP
507}
508
55d5bb44
JP
509/* Returns a pointer to a string describing the program version. The
510 * caller must not modify or free the returned string.
b53055f4 511 */
55d5bb44 512const char *
c71c6043 513get_program_version(void)
55d5bb44
JP
514{
515 return program_version;
064af421
BP
516}
517
518/* Print the version information for the program. */
519void
55d5bb44 520ovs_print_version(uint8_t min_ofp, uint8_t max_ofp)
064af421 521{
55d5bb44 522 printf("%s", program_version);
064af421
BP
523 if (min_ofp || max_ofp) {
524 printf("OpenFlow versions %#x:%#x\n", min_ofp, max_ofp);
525 }
526}
527
528/* Writes the 'size' bytes in 'buf' to 'stream' as hex bytes arranged 16 per
529 * line. Numeric offsets are also included, starting at 'ofs' for the first
530 * byte in 'buf'. If 'ascii' is true then the corresponding ASCII characters
531 * are also rendered alongside. */
532void
533ovs_hex_dump(FILE *stream, const void *buf_, size_t size,
534 uintptr_t ofs, bool ascii)
535{
536 const uint8_t *buf = buf_;
537 const size_t per_line = 16; /* Maximum bytes per line. */
538
539 while (size > 0)
540 {
541 size_t start, end, n;
542 size_t i;
543
544 /* Number of bytes on this line. */
545 start = ofs % per_line;
546 end = per_line;
547 if (end - start > size)
548 end = start + size;
549 n = end - start;
550
551 /* Print line. */
34582733 552 fprintf(stream, "%08"PRIxMAX" ", (uintmax_t) ROUND_DOWN(ofs, per_line));
064af421
BP
553 for (i = 0; i < start; i++)
554 fprintf(stream, " ");
555 for (; i < end; i++)
34582733 556 fprintf(stream, "%02x%c",
064af421
BP
557 buf[i - start], i == per_line / 2 - 1? '-' : ' ');
558 if (ascii)
559 {
560 for (; i < per_line; i++)
561 fprintf(stream, " ");
562 fprintf(stream, "|");
563 for (i = 0; i < start; i++)
564 fprintf(stream, " ");
565 for (; i < end; i++) {
566 int c = buf[i - start];
567 putc(c >= 32 && c < 127 ? c : '.', stream);
568 }
569 for (; i < per_line; i++)
570 fprintf(stream, " ");
571 fprintf(stream, "|");
572 }
573 fprintf(stream, "\n");
574
575 ofs += n;
576 buf += n;
577 size -= n;
578 }
579}
580
581bool
582str_to_int(const char *s, int base, int *i)
583{
584 long long ll;
585 bool ok = str_to_llong(s, base, &ll);
586 *i = ll;
587 return ok;
588}
589
590bool
591str_to_long(const char *s, int base, long *li)
592{
593 long long ll;
594 bool ok = str_to_llong(s, base, &ll);
595 *li = ll;
596 return ok;
597}
598
599bool
600str_to_llong(const char *s, int base, long long *x)
601{
602 int save_errno = errno;
603 char *tail;
604 errno = 0;
605 *x = strtoll(s, &tail, base);
606 if (errno == EINVAL || errno == ERANGE || tail == s || *tail != '\0') {
607 errno = save_errno;
608 *x = 0;
609 return false;
610 } else {
611 errno = save_errno;
612 return true;
613 }
614}
615
f38b84ea
BP
616/* Converts floating-point string 's' into a double. If successful, stores
617 * the double in '*d' and returns true; on failure, stores 0 in '*d' and
618 * returns false.
619 *
620 * Underflow (e.g. "1e-9999") is not considered an error, but overflow
621 * (e.g. "1e9999)" is. */
622bool
623str_to_double(const char *s, double *d)
624{
625 int save_errno = errno;
626 char *tail;
627 errno = 0;
628 *d = strtod(s, &tail);
629 if (errno == EINVAL || (errno == ERANGE && *d != 0)
630 || tail == s || *tail != '\0') {
631 errno = save_errno;
632 *d = 0;
633 return false;
634 } else {
635 errno = save_errno;
636 return true;
637 }
638}
639
640/* Returns the value of 'c' as a hexadecimal digit. */
641int
642hexit_value(int c)
643{
644 switch (c) {
645 case '0': case '1': case '2': case '3': case '4':
646 case '5': case '6': case '7': case '8': case '9':
647 return c - '0';
648
649 case 'a': case 'A':
650 return 0xa;
651
652 case 'b': case 'B':
653 return 0xb;
654
655 case 'c': case 'C':
656 return 0xc;
657
658 case 'd': case 'D':
659 return 0xd;
660
661 case 'e': case 'E':
662 return 0xe;
663
664 case 'f': case 'F':
665 return 0xf;
f38b84ea 666
09246b99
BP
667 default:
668 return -1;
669 }
f38b84ea 670}
29d4af60 671
bf971267
BP
672/* Returns the integer value of the 'n' hexadecimal digits starting at 's', or
673 * UINT_MAX if one of those "digits" is not really a hex digit. If 'ok' is
674 * nonnull, '*ok' is set to true if the conversion succeeds or to false if a
675 * non-hex digit is detected. */
676unsigned int
677hexits_value(const char *s, size_t n, bool *ok)
678{
679 unsigned int value;
680 size_t i;
681
682 value = 0;
683 for (i = 0; i < n; i++) {
684 int hexit = hexit_value(s[i]);
685 if (hexit < 0) {
686 if (ok) {
687 *ok = false;
688 }
689 return UINT_MAX;
690 }
691 value = (value << 4) + hexit;
692 }
693 if (ok) {
694 *ok = true;
695 }
696 return value;
697}
698
daf03c53
BP
699/* Returns the current working directory as a malloc()'d string, or a null
700 * pointer if the current working directory cannot be determined. */
701char *
702get_cwd(void)
703{
704 long int path_max;
705 size_t size;
706
707 /* Get maximum path length or at least a reasonable estimate. */
661c32dc 708#ifndef _WIN32
daf03c53 709 path_max = pathconf(".", _PC_PATH_MAX);
661c32dc
GS
710#else
711 path_max = MAX_PATH;
712#endif
daf03c53
BP
713 size = (path_max < 0 ? 1024
714 : path_max > 10240 ? 10240
715 : path_max);
716
717 /* Get current working directory. */
718 for (;;) {
719 char *buf = xmalloc(size);
720 if (getcwd(buf, size)) {
721 return xrealloc(buf, strlen(buf) + 1);
722 } else {
723 int error = errno;
724 free(buf);
725 if (error != ERANGE) {
10a89ef0 726 VLOG_WARN("getcwd failed (%s)", ovs_strerror(error));
daf03c53
BP
727 return NULL;
728 }
729 size *= 2;
730 }
731 }
732}
733
e1aff6f9
BP
734static char *
735all_slashes_name(const char *s)
736{
737 return xstrdup(s[0] == '/' && s[1] == '/' && s[2] != '/' ? "//"
738 : s[0] == '/' ? "/"
739 : ".");
740}
741
29d4af60
BP
742/* Returns the directory name portion of 'file_name' as a malloc()'d string,
743 * similar to the POSIX dirname() function but thread-safe. */
744char *
745dir_name(const char *file_name)
746{
747 size_t len = strlen(file_name);
748 while (len > 0 && file_name[len - 1] == '/') {
749 len--;
750 }
751 while (len > 0 && file_name[len - 1] != '/') {
752 len--;
753 }
754 while (len > 0 && file_name[len - 1] == '/') {
755 len--;
756 }
e1aff6f9
BP
757 return len ? xmemdup0(file_name, len) : all_slashes_name(file_name);
758}
759
760/* Returns the file name portion of 'file_name' as a malloc()'d string,
761 * similar to the POSIX basename() function but thread-safe. */
762char *
763base_name(const char *file_name)
764{
765 size_t end, start;
766
767 end = strlen(file_name);
768 while (end > 0 && file_name[end - 1] == '/') {
769 end--;
770 }
771
772 if (!end) {
773 return all_slashes_name(file_name);
29d4af60 774 }
e1aff6f9
BP
775
776 start = end;
777 while (start > 0 && file_name[start - 1] != '/') {
778 start--;
779 }
780
781 return xmemdup0(file_name + start, end - start);
29d4af60 782}
18b9283b 783
daf03c53
BP
784/* If 'file_name' starts with '/', returns a copy of 'file_name'. Otherwise,
785 * returns an absolute path to 'file_name' considering it relative to 'dir',
786 * which itself must be absolute. 'dir' may be null or the empty string, in
787 * which case the current working directory is used.
788 *
789 * Returns a null pointer if 'dir' is null and getcwd() fails. */
790char *
791abs_file_name(const char *dir, const char *file_name)
792{
793 if (file_name[0] == '/') {
794 return xstrdup(file_name);
795 } else if (dir && dir[0]) {
796 char *separator = dir[strlen(dir) - 1] == '/' ? "" : "/";
797 return xasprintf("%s%s%s", dir, separator, file_name);
798 } else {
799 char *cwd = get_cwd();
800 if (cwd) {
801 char *abs_name = xasprintf("%s/%s", cwd, file_name);
802 free(cwd);
803 return abs_name;
804 } else {
805 return NULL;
806 }
807 }
808}
809
fee0c963
BP
810/* Like readlink(), but returns the link name as a null-terminated string in
811 * allocated memory that the caller must eventually free (with free()).
812 * Returns NULL on error, in which case errno is set appropriately. */
ac01d085 813static char *
fee0c963
BP
814xreadlink(const char *filename)
815{
816 size_t size;
817
818 for (size = 64; ; size *= 2) {
819 char *buf = xmalloc(size);
820 ssize_t retval = readlink(filename, buf, size);
821 int error = errno;
822
823 if (retval >= 0 && retval < size) {
824 buf[retval] = '\0';
825 return buf;
826 }
827
828 free(buf);
829 if (retval < 0) {
830 errno = error;
831 return NULL;
832 }
833 }
834}
835
836/* Returns a version of 'filename' with symlinks in the final component
837 * dereferenced. This differs from realpath() in that:
838 *
839 * - 'filename' need not exist.
840 *
841 * - If 'filename' does exist as a symlink, its referent need not exist.
842 *
843 * - Only symlinks in the final component of 'filename' are dereferenced.
844 *
e9f56e84
GS
845 * For Windows platform, this function returns a string that has the same
846 * value as the passed string.
847 *
fee0c963
BP
848 * The caller must eventually free the returned string (with free()). */
849char *
850follow_symlinks(const char *filename)
851{
e9f56e84 852#ifndef _WIN32
fee0c963
BP
853 struct stat s;
854 char *fn;
855 int i;
856
857 fn = xstrdup(filename);
858 for (i = 0; i < 10; i++) {
859 char *linkname;
860 char *next_fn;
861
862 if (lstat(fn, &s) != 0 || !S_ISLNK(s.st_mode)) {
863 return fn;
864 }
865
866 linkname = xreadlink(fn);
867 if (!linkname) {
10a89ef0
BP
868 VLOG_WARN("%s: readlink failed (%s)",
869 filename, ovs_strerror(errno));
fee0c963
BP
870 return fn;
871 }
872
873 if (linkname[0] == '/') {
874 /* Target of symlink is absolute so use it raw. */
875 next_fn = linkname;
876 } else {
877 /* Target of symlink is relative so add to 'fn''s directory. */
878 char *dir = dir_name(fn);
879
880 if (!strcmp(dir, ".")) {
881 next_fn = linkname;
882 } else {
883 char *separator = dir[strlen(dir) - 1] == '/' ? "" : "/";
884 next_fn = xasprintf("%s%s%s", dir, separator, linkname);
885 free(linkname);
886 }
887
888 free(dir);
889 }
890
891 free(fn);
892 fn = next_fn;
893 }
894
895 VLOG_WARN("%s: too many levels of symlinks", filename);
896 free(fn);
e9f56e84 897#endif
fee0c963
BP
898 return xstrdup(filename);
899}
daf03c53 900
18b9283b 901/* Pass a value to this function if it is marked with
d295e8e9
JP
902 * __attribute__((warn_unused_result)) and you genuinely want to ignore
903 * its return value. (Note that every scalar type can be implicitly
18b9283b 904 * converted to bool.) */
c69ee87c 905void ignore(bool x OVS_UNUSED) { }
44b4d050
BP
906
907/* Returns an appropriate delimiter for inserting just before the 0-based item
908 * 'index' in a list that has 'total' items in it. */
909const char *
910english_list_delimiter(size_t index, size_t total)
911{
912 return (index == 0 ? ""
913 : index < total - 1 ? ", "
914 : total > 2 ? ", and "
915 : " and ");
916}
711e0157 917
0ee140fb 918/* Returns the number of trailing 0-bits in 'n'. Undefined if 'n' == 0. */
d43d314e 919#if __GNUC__ >= 4
0ee140fb 920/* Defined inline in util.h. */
aad29cd1 921#else
8c947903 922/* Returns the number of trailing 0-bits in 'n'. Undefined if 'n' == 0. */
481da12c 923int
d43d314e 924raw_ctz(uint64_t n)
0ee140fb 925{
d43d314e
BP
926 uint64_t k;
927 int count = 63;
aad29cd1
BP
928
929#define CTZ_STEP(X) \
0ee140fb
BP
930 k = n << (X); \
931 if (k) { \
932 count -= X; \
933 n = k; \
934 }
d43d314e 935 CTZ_STEP(32);
0ee140fb
BP
936 CTZ_STEP(16);
937 CTZ_STEP(8);
938 CTZ_STEP(4);
939 CTZ_STEP(2);
940 CTZ_STEP(1);
aad29cd1
BP
941#undef CTZ_STEP
942
0ee140fb 943 return count;
aad29cd1 944}
8c947903
JR
945
946/* Returns the number of leading 0-bits in 'n'. Undefined if 'n' == 0. */
947int
948raw_clz64(uint64_t n)
949{
950 uint64_t k;
951 int count = 63;
952
953#define CLZ_STEP(X) \
954 k = n >> (X); \
955 if (k) { \
956 count -= X; \
957 n = k; \
958 }
959 CLZ_STEP(32);
960 CLZ_STEP(16);
961 CLZ_STEP(8);
962 CLZ_STEP(4);
963 CLZ_STEP(2);
964 CLZ_STEP(1);
965#undef CLZ_STEP
966
967 return count;
968}
0ee140fb 969#endif
75a75043 970
381657b3 971#if NEED_COUNT_1BITS_8
a656cb77
BP
972#define INIT1(X) \
973 ((((X) & (1 << 0)) != 0) + \
974 (((X) & (1 << 1)) != 0) + \
975 (((X) & (1 << 2)) != 0) + \
976 (((X) & (1 << 3)) != 0) + \
977 (((X) & (1 << 4)) != 0) + \
978 (((X) & (1 << 5)) != 0) + \
979 (((X) & (1 << 6)) != 0) + \
980 (((X) & (1 << 7)) != 0))
981#define INIT2(X) INIT1(X), INIT1((X) + 1)
982#define INIT4(X) INIT2(X), INIT2((X) + 2)
983#define INIT8(X) INIT4(X), INIT4((X) + 4)
984#define INIT16(X) INIT8(X), INIT8((X) + 8)
985#define INIT32(X) INIT16(X), INIT16((X) + 16)
986#define INIT64(X) INIT32(X), INIT32((X) + 32)
987
c3cc4d2d
JR
988const uint8_t count_1bits_8[256] = {
989 INIT64(0), INIT64(64), INIT64(128), INIT64(192)
990};
991#endif
2a4ca27c 992
75a75043
BP
993/* Returns true if the 'n' bytes starting at 'p' are zeros. */
994bool
995is_all_zeros(const uint8_t *p, size_t n)
996{
997 size_t i;
998
999 for (i = 0; i < n; i++) {
1000 if (p[i] != 0x00) {
1001 return false;
1002 }
1003 }
1004 return true;
1005}
1006
1007/* Returns true if the 'n' bytes starting at 'p' are 0xff. */
1008bool
1009is_all_ones(const uint8_t *p, size_t n)
1010{
1011 size_t i;
1012
1013 for (i = 0; i < n; i++) {
1014 if (p[i] != 0xff) {
1015 return false;
1016 }
1017 }
1018 return true;
1019}
1020
ddc4f8e2
BP
1021/* Copies 'n_bits' bits starting from bit 'src_ofs' in 'src' to the 'n_bits'
1022 * starting from bit 'dst_ofs' in 'dst'. 'src' is 'src_len' bytes long and
1023 * 'dst' is 'dst_len' bytes long.
1024 *
1025 * If you consider all of 'src' to be a single unsigned integer in network byte
1026 * order, then bit N is the bit with value 2**N. That is, bit 0 is the bit
1027 * with value 1 in src[src_len - 1], bit 1 is the bit with value 2, bit 2 is
1028 * the bit with value 4, ..., bit 8 is the bit with value 1 in src[src_len -
1029 * 2], and so on. Similarly for 'dst'.
1030 *
1031 * Required invariants:
1032 * src_ofs + n_bits <= src_len * 8
1033 * dst_ofs + n_bits <= dst_len * 8
1034 * 'src' and 'dst' must not overlap.
1035 */
1036void
1037bitwise_copy(const void *src_, unsigned int src_len, unsigned int src_ofs,
1038 void *dst_, unsigned int dst_len, unsigned int dst_ofs,
1039 unsigned int n_bits)
1040{
1041 const uint8_t *src = src_;
1042 uint8_t *dst = dst_;
1043
1044 src += src_len - (src_ofs / 8 + 1);
1045 src_ofs %= 8;
1046
1047 dst += dst_len - (dst_ofs / 8 + 1);
1048 dst_ofs %= 8;
1049
1050 if (src_ofs == 0 && dst_ofs == 0) {
1051 unsigned int n_bytes = n_bits / 8;
1052 if (n_bytes) {
1053 dst -= n_bytes - 1;
1054 src -= n_bytes - 1;
1055 memcpy(dst, src, n_bytes);
1056
1057 n_bits %= 8;
1058 src--;
1059 dst--;
1060 }
1061 if (n_bits) {
1062 uint8_t mask = (1 << n_bits) - 1;
1063 *dst = (*dst & ~mask) | (*src & mask);
1064 }
1065 } else {
1066 while (n_bits > 0) {
1067 unsigned int max_copy = 8 - MAX(src_ofs, dst_ofs);
1068 unsigned int chunk = MIN(n_bits, max_copy);
1069 uint8_t mask = ((1 << chunk) - 1) << dst_ofs;
1070
1071 *dst &= ~mask;
1072 *dst |= ((*src >> src_ofs) << dst_ofs) & mask;
1073
1074 src_ofs += chunk;
1075 if (src_ofs == 8) {
1076 src--;
1077 src_ofs = 0;
1078 }
1079 dst_ofs += chunk;
1080 if (dst_ofs == 8) {
1081 dst--;
1082 dst_ofs = 0;
1083 }
1084 n_bits -= chunk;
1085 }
1086 }
1087}
1088
6cc7ea5e
BP
1089/* Zeros the 'n_bits' bits starting from bit 'dst_ofs' in 'dst'. 'dst' is
1090 * 'dst_len' bytes long.
1091 *
1092 * If you consider all of 'dst' to be a single unsigned integer in network byte
1093 * order, then bit N is the bit with value 2**N. That is, bit 0 is the bit
1094 * with value 1 in dst[dst_len - 1], bit 1 is the bit with value 2, bit 2 is
1095 * the bit with value 4, ..., bit 8 is the bit with value 1 in dst[dst_len -
1096 * 2], and so on.
1097 *
1098 * Required invariant:
1099 * dst_ofs + n_bits <= dst_len * 8
1100 */
1101void
1102bitwise_zero(void *dst_, unsigned int dst_len, unsigned dst_ofs,
1103 unsigned int n_bits)
1104{
1105 uint8_t *dst = dst_;
1106
1107 if (!n_bits) {
1108 return;
1109 }
1110
1111 dst += dst_len - (dst_ofs / 8 + 1);
1112 dst_ofs %= 8;
1113
1114 if (dst_ofs) {
1115 unsigned int chunk = MIN(n_bits, 8 - dst_ofs);
1116
1117 *dst &= ~(((1 << chunk) - 1) << dst_ofs);
1118
1119 n_bits -= chunk;
1120 if (!n_bits) {
1121 return;
1122 }
1123
1124 dst--;
1125 }
1126
1127 while (n_bits >= 8) {
1128 *dst-- = 0;
1129 n_bits -= 8;
1130 }
1131
1132 if (n_bits) {
1133 *dst &= ~((1 << n_bits) - 1);
1134 }
1135}
1136
c2dd4932
BP
1137/* Sets to 1 all of the 'n_bits' bits starting from bit 'dst_ofs' in 'dst'.
1138 * 'dst' is 'dst_len' bytes long.
1139 *
1140 * If you consider all of 'dst' to be a single unsigned integer in network byte
1141 * order, then bit N is the bit with value 2**N. That is, bit 0 is the bit
1142 * with value 1 in dst[dst_len - 1], bit 1 is the bit with value 2, bit 2 is
1143 * the bit with value 4, ..., bit 8 is the bit with value 1 in dst[dst_len -
1144 * 2], and so on.
1145 *
1146 * Required invariant:
1147 * dst_ofs + n_bits <= dst_len * 8
1148 */
1149void
1150bitwise_one(void *dst_, unsigned int dst_len, unsigned dst_ofs,
1151 unsigned int n_bits)
1152{
1153 uint8_t *dst = dst_;
1154
1155 if (!n_bits) {
1156 return;
1157 }
1158
1159 dst += dst_len - (dst_ofs / 8 + 1);
1160 dst_ofs %= 8;
1161
1162 if (dst_ofs) {
1163 unsigned int chunk = MIN(n_bits, 8 - dst_ofs);
1164
1165 *dst |= ((1 << chunk) - 1) << dst_ofs;
1166
1167 n_bits -= chunk;
1168 if (!n_bits) {
1169 return;
1170 }
1171
1172 dst--;
1173 }
1174
1175 while (n_bits >= 8) {
1176 *dst-- = 0xff;
1177 n_bits -= 8;
1178 }
1179
1180 if (n_bits) {
1181 *dst |= (1 << n_bits) - 1;
1182 }
1183}
1184
79a010aa
BP
1185/* Scans the 'n_bits' bits starting from bit 'dst_ofs' in 'dst' for 1-bits.
1186 * Returns false if any 1-bits are found, otherwise true. 'dst' is 'dst_len'
1187 * bytes long.
1188 *
1189 * If you consider all of 'dst' to be a single unsigned integer in network byte
1190 * order, then bit N is the bit with value 2**N. That is, bit 0 is the bit
1191 * with value 1 in dst[dst_len - 1], bit 1 is the bit with value 2, bit 2 is
1192 * the bit with value 4, ..., bit 8 is the bit with value 1 in dst[dst_len -
1193 * 2], and so on.
1194 *
1195 * Required invariant:
1196 * dst_ofs + n_bits <= dst_len * 8
1197 */
1198bool
1199bitwise_is_all_zeros(const void *p_, unsigned int len, unsigned int ofs,
1200 unsigned int n_bits)
1201{
1202 const uint8_t *p = p_;
1203
1204 if (!n_bits) {
1205 return true;
1206 }
1207
1208 p += len - (ofs / 8 + 1);
1209 ofs %= 8;
1210
1211 if (ofs) {
1212 unsigned int chunk = MIN(n_bits, 8 - ofs);
1213
1214 if (*p & (((1 << chunk) - 1) << ofs)) {
1215 return false;
1216 }
1217
1218 n_bits -= chunk;
1219 if (!n_bits) {
1220 return true;
1221 }
1222
1223 p--;
1224 }
1225
1226 while (n_bits >= 8) {
1227 if (*p) {
1228 return false;
1229 }
1230 n_bits -= 8;
1231 p--;
1232 }
1233
1234 if (n_bits && *p & ((1 << n_bits) - 1)) {
1235 return false;
1236 }
1237
1238 return true;
1239}
1240
ddc4f8e2
BP
1241/* Copies the 'n_bits' low-order bits of 'value' into the 'n_bits' bits
1242 * starting at bit 'dst_ofs' in 'dst', which is 'dst_len' bytes long.
1243 *
1244 * If you consider all of 'dst' to be a single unsigned integer in network byte
1245 * order, then bit N is the bit with value 2**N. That is, bit 0 is the bit
1246 * with value 1 in dst[dst_len - 1], bit 1 is the bit with value 2, bit 2 is
1247 * the bit with value 4, ..., bit 8 is the bit with value 1 in dst[dst_len -
1248 * 2], and so on.
1249 *
1250 * Required invariants:
1251 * dst_ofs + n_bits <= dst_len * 8
1252 * n_bits <= 64
1253 */
1254void
1255bitwise_put(uint64_t value,
1256 void *dst, unsigned int dst_len, unsigned int dst_ofs,
1257 unsigned int n_bits)
1258{
1259 ovs_be64 n_value = htonll(value);
1260 bitwise_copy(&n_value, sizeof n_value, 0,
1261 dst, dst_len, dst_ofs,
1262 n_bits);
1263}
1264
1265/* Returns the value of the 'n_bits' bits starting at bit 'src_ofs' in 'src',
1266 * which is 'src_len' bytes long.
1267 *
1268 * If you consider all of 'src' to be a single unsigned integer in network byte
1269 * order, then bit N is the bit with value 2**N. That is, bit 0 is the bit
1270 * with value 1 in src[src_len - 1], bit 1 is the bit with value 2, bit 2 is
1271 * the bit with value 4, ..., bit 8 is the bit with value 1 in src[src_len -
1272 * 2], and so on.
1273 *
1274 * Required invariants:
1275 * src_ofs + n_bits <= src_len * 8
1276 * n_bits <= 64
1277 */
1278uint64_t
1279bitwise_get(const void *src, unsigned int src_len,
1280 unsigned int src_ofs, unsigned int n_bits)
1281{
1282 ovs_be64 value = htonll(0);
1283
1284 bitwise_copy(src, src_len, src_ofs,
1285 &value, sizeof value, 0,
1286 n_bits);
1287 return ntohll(value);
1288}
ed2232fc
BP
1289\f
1290/* ovs_scan */
1291
1292struct scan_spec {
1293 unsigned int width;
1294 enum {
1295 SCAN_DISCARD,
1296 SCAN_CHAR,
1297 SCAN_SHORT,
1298 SCAN_INT,
1299 SCAN_LONG,
1300 SCAN_LLONG,
1301 SCAN_INTMAX_T,
1302 SCAN_PTRDIFF_T,
1303 SCAN_SIZE_T
1304 } type;
1305};
1306
1307static const char *
1308skip_spaces(const char *s)
1309{
1310 while (isspace((unsigned char) *s)) {
1311 s++;
1312 }
1313 return s;
1314}
1315
1316static const char *
1317scan_int(const char *s, const struct scan_spec *spec, int base, va_list *args)
1318{
1319 const char *start = s;
1320 uintmax_t value;
1321 bool negative;
1322 int n_digits;
1323
1324 negative = *s == '-';
1325 s += *s == '-' || *s == '+';
1326
1327 if ((!base || base == 16) && *s == '0' && (s[1] == 'x' || s[1] == 'X')) {
1328 base = 16;
1329 s += 2;
1330 } else if (!base) {
1331 base = *s == '0' ? 8 : 10;
1332 }
1333
1334 if (s - start >= spec->width) {
1335 return NULL;
1336 }
1337
1338 value = 0;
1339 n_digits = 0;
1340 while (s - start < spec->width) {
1341 int digit = hexit_value(*s);
1342
1343 if (digit < 0 || digit >= base) {
1344 break;
1345 }
1346 value = value * base + digit;
1347 n_digits++;
1348 s++;
1349 }
1350 if (!n_digits) {
1351 return NULL;
1352 }
1353
1354 if (negative) {
1355 value = -value;
1356 }
1357
1358 switch (spec->type) {
1359 case SCAN_DISCARD:
1360 break;
1361 case SCAN_CHAR:
1362 *va_arg(*args, char *) = value;
1363 break;
1364 case SCAN_SHORT:
1365 *va_arg(*args, short int *) = value;
1366 break;
1367 case SCAN_INT:
1368 *va_arg(*args, int *) = value;
1369 break;
1370 case SCAN_LONG:
1371 *va_arg(*args, long int *) = value;
1372 break;
1373 case SCAN_LLONG:
1374 *va_arg(*args, long long int *) = value;
1375 break;
1376 case SCAN_INTMAX_T:
1377 *va_arg(*args, intmax_t *) = value;
1378 break;
1379 case SCAN_PTRDIFF_T:
1380 *va_arg(*args, ptrdiff_t *) = value;
1381 break;
1382 case SCAN_SIZE_T:
1383 *va_arg(*args, size_t *) = value;
1384 break;
1385 }
1386 return s;
1387}
1388
1389static const char *
1390skip_digits(const char *s)
1391{
1392 while (*s >= '0' && *s <= '9') {
1393 s++;
1394 }
1395 return s;
1396}
1397
1398static const char *
1399scan_float(const char *s, const struct scan_spec *spec, va_list *args)
1400{
1401 const char *start = s;
1402 long double value;
1403 char *tail;
1404 char *copy;
1405 bool ok;
1406
1407 s += *s == '+' || *s == '-';
1408 s = skip_digits(s);
1409 if (*s == '.') {
1410 s = skip_digits(s + 1);
1411 }
1412 if (*s == 'e' || *s == 'E') {
1413 s++;
1414 s += *s == '+' || *s == '-';
1415 s = skip_digits(s);
1416 }
1417
1418 if (s - start > spec->width) {
1419 s = start + spec->width;
1420 }
1421
1422 copy = xmemdup0(start, s - start);
1423 value = strtold(copy, &tail);
1424 ok = *tail == '\0';
1425 free(copy);
1426 if (!ok) {
1427 return NULL;
1428 }
1429
1430 switch (spec->type) {
1431 case SCAN_DISCARD:
1432 break;
1433 case SCAN_INT:
1434 *va_arg(*args, float *) = value;
1435 break;
1436 case SCAN_LONG:
1437 *va_arg(*args, double *) = value;
1438 break;
1439 case SCAN_LLONG:
1440 *va_arg(*args, long double *) = value;
1441 break;
1442
1443 case SCAN_CHAR:
1444 case SCAN_SHORT:
1445 case SCAN_INTMAX_T:
1446 case SCAN_PTRDIFF_T:
1447 case SCAN_SIZE_T:
428b2edd 1448 OVS_NOT_REACHED();
ed2232fc
BP
1449 }
1450 return s;
1451}
1452
1453static void
1454scan_output_string(const struct scan_spec *spec,
1455 const char *s, size_t n,
1456 va_list *args)
1457{
1458 if (spec->type != SCAN_DISCARD) {
1459 char *out = va_arg(*args, char *);
1460 memcpy(out, s, n);
1461 out[n] = '\0';
1462 }
1463}
1464
1465static const char *
1466scan_string(const char *s, const struct scan_spec *spec, va_list *args)
1467{
1468 size_t n;
1469
1470 for (n = 0; n < spec->width; n++) {
1471 if (!s[n] || isspace((unsigned char) s[n])) {
1472 break;
1473 }
1474 }
1475 if (!n) {
1476 return NULL;
1477 }
1478
1479 scan_output_string(spec, s, n, args);
1480 return s + n;
1481}
1482
1483static const char *
1484parse_scanset(const char *p_, unsigned long *set, bool *complemented)
1485{
1486 const uint8_t *p = (const uint8_t *) p_;
1487
1488 *complemented = *p == '^';
1489 p += *complemented;
1490
1491 if (*p == ']') {
1492 bitmap_set1(set, ']');
1493 p++;
1494 }
1495
1496 while (*p && *p != ']') {
1497 if (p[1] == '-' && p[2] != ']' && p[2] > *p) {
1498 bitmap_set_multiple(set, *p, p[2] - *p + 1, true);
1499 p += 3;
1500 } else {
1501 bitmap_set1(set, *p++);
1502 }
1503 }
1504 if (*p == ']') {
1505 p++;
1506 }
1507 return (const char *) p;
1508}
1509
1510static const char *
1511scan_set(const char *s, const struct scan_spec *spec, const char **pp,
1512 va_list *args)
1513{
1514 unsigned long set[BITMAP_N_LONGS(UCHAR_MAX + 1)];
1515 bool complemented;
1516 unsigned int n;
1517
1518 /* Parse the scan set. */
1519 memset(set, 0, sizeof set);
1520 *pp = parse_scanset(*pp, set, &complemented);
1521
1522 /* Parse the data. */
1523 n = 0;
1524 while (s[n]
1525 && bitmap_is_set(set, (unsigned char) s[n]) == !complemented
1526 && n < spec->width) {
1527 n++;
1528 }
1529 if (!n) {
1530 return NULL;
1531 }
1532 scan_output_string(spec, s, n, args);
1533 return s + n;
1534}
1535
1536static const char *
1537scan_chars(const char *s, const struct scan_spec *spec, va_list *args)
1538{
31499678 1539 unsigned int n = spec->width == UINT_MAX ? 1 : spec->width;
ed2232fc
BP
1540
1541 if (strlen(s) < n) {
1542 return NULL;
1543 }
1544 if (spec->type != SCAN_DISCARD) {
1545 memcpy(va_arg(*args, char *), s, n);
1546 }
1547 return s + n;
1548}
1549
1550/* This is an implementation of the standard sscanf() function, with the
1551 * following exceptions:
1552 *
037821cf 1553 * - It returns true if the entire format was successfully scanned and
ed2232fc
BP
1554 * converted, false if any conversion failed.
1555 *
1556 * - The standard doesn't define sscanf() behavior when an out-of-range value
1557 * is scanned, e.g. if a "%"PRIi8 conversion scans "-1" or "0x1ff". Some
1558 * implementations consider this an error and stop scanning. This
1559 * implementation never considers an out-of-range value an error; instead,
1560 * it stores the least-significant bits of the converted value in the
1561 * destination, e.g. the value 255 for both examples earlier.
1562 *
1563 * - Only single-byte characters are supported, that is, the 'l' modifier
1564 * on %s, %[, and %c is not supported. The GNU extension 'a' modifier is
1565 * also not supported.
1566 *
1567 * - %p is not supported.
1568 */
1569bool
037821cf 1570ovs_scan(const char *s, const char *format, ...)
ed2232fc
BP
1571{
1572 const char *const start = s;
1573 bool ok = false;
1574 const char *p;
1575 va_list args;
1576
037821cf
HL
1577 va_start(args, format);
1578 p = format;
ed2232fc
BP
1579 while (*p != '\0') {
1580 struct scan_spec spec;
1581 unsigned char c = *p++;
1582 bool discard;
1583
1584 if (isspace(c)) {
1585 s = skip_spaces(s);
1586 continue;
1587 } else if (c != '%') {
1588 if (*s != c) {
1589 goto exit;
1590 }
1591 s++;
1592 continue;
1593 } else if (*p == '%') {
1594 if (*s++ != '%') {
1595 goto exit;
1596 }
1597 p++;
1598 continue;
1599 }
1600
1601 /* Parse '*' flag. */
1602 discard = *p == '*';
1603 p += discard;
1604
1605 /* Parse field width. */
1606 spec.width = 0;
1607 while (*p >= '0' && *p <= '9') {
1608 spec.width = spec.width * 10 + (*p++ - '0');
1609 }
1610 if (spec.width == 0) {
1611 spec.width = UINT_MAX;
1612 }
1613
1614 /* Parse type modifier. */
1615 switch (*p) {
1616 case 'h':
1617 if (p[1] == 'h') {
1618 spec.type = SCAN_CHAR;
1619 p += 2;
1620 } else {
1621 spec.type = SCAN_SHORT;
1622 p++;
1623 }
1624 break;
1625
1626 case 'j':
1627 spec.type = SCAN_INTMAX_T;
1628 p++;
1629 break;
1630
1631 case 'l':
1632 if (p[1] == 'l') {
1633 spec.type = SCAN_LLONG;
1634 p += 2;
1635 } else {
1636 spec.type = SCAN_LONG;
1637 p++;
1638 }
1639 break;
1640
1641 case 'L':
1642 case 'q':
1643 spec.type = SCAN_LLONG;
1644 p++;
1645 break;
1646
1647 case 't':
1648 spec.type = SCAN_PTRDIFF_T;
1649 p++;
1650 break;
1651
1652 case 'z':
1653 spec.type = SCAN_SIZE_T;
1654 p++;
1655 break;
1656
1657 default:
1658 spec.type = SCAN_INT;
1659 break;
1660 }
1661
1662 if (discard) {
1663 spec.type = SCAN_DISCARD;
1664 }
1665
1666 c = *p++;
1667 if (c != 'c' && c != 'n' && c != '[') {
1668 s = skip_spaces(s);
1669 }
1670 switch (c) {
1671 case 'd':
1672 s = scan_int(s, &spec, 10, &args);
1673 break;
1674
1675 case 'i':
1676 s = scan_int(s, &spec, 0, &args);
1677 break;
1678
1679 case 'o':
1680 s = scan_int(s, &spec, 8, &args);
1681 break;
1682
1683 case 'u':
1684 s = scan_int(s, &spec, 10, &args);
1685 break;
1686
1687 case 'x':
1688 case 'X':
1689 s = scan_int(s, &spec, 16, &args);
1690 break;
1691
1692 case 'e':
1693 case 'f':
1694 case 'g':
1695 case 'E':
1696 case 'G':
1697 s = scan_float(s, &spec, &args);
1698 break;
1699
1700 case 's':
1701 s = scan_string(s, &spec, &args);
1702 break;
1703
1704 case '[':
1705 s = scan_set(s, &spec, &p, &args);
1706 break;
1707
1708 case 'c':
1709 s = scan_chars(s, &spec, &args);
1710 break;
1711
1712 case 'n':
1713 if (spec.type != SCAN_DISCARD) {
1714 *va_arg(args, int *) = s - start;
1715 }
1716 break;
1717 }
1718
1719 if (!s) {
1720 goto exit;
1721 }
1722 }
1723 ok = true;
1724
1725exit:
1726 va_end(args);
1727 return ok;
1728}
1729
5fd2f418 1730void
275eebb9
PS
1731xsleep(unsigned int seconds)
1732{
275eebb9 1733 ovsrcu_quiesce_start();
5fd2f418
GS
1734#ifdef _WIN32
1735 Sleep(seconds * 1000);
1736#else
1737 sleep(seconds);
1738#endif
275eebb9 1739 ovsrcu_quiesce_end();
275eebb9
PS
1740}
1741
06f14c92
GS
1742#ifdef _WIN32
1743\f
06f14c92 1744char *
315ea327 1745ovs_format_message(int error)
06f14c92 1746{
315ea327
GS
1747 enum { BUFSIZE = sizeof strerror_buffer_get()->s };
1748 char *buffer = strerror_buffer_get()->s;
1749
1750 FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
1751 NULL, error, 0, buffer, BUFSIZE, NULL);
06f14c92
GS
1752 return buffer;
1753}
315ea327
GS
1754
1755/* Returns a null-terminated string that explains the last error.
1756 * Use this function to get the error string for WINAPI calls. */
1757char *
1758ovs_lasterror_to_string(void)
1759{
1760 return ovs_format_message(GetLastError());
1761}
daa04db8
GS
1762
1763int
1764ftruncate(int fd, off_t length)
1765{
1766 int error;
1767
1768 error = _chsize_s(fd, length);
1769 if (error) {
1770 return -1;
1771 }
1772 return 0;
1773}
06f14c92 1774#endif