printf: make integer format strings print long long-sized values.
[oweals/busybox.git] / libbb / print_flags.c
1 /* vi: set sw=4 ts=4: */
2 /* Print string that matches bit masked flags
3  *
4  * Copyright (C) 2008 Natanael Copa <natanael.copa@gmail.com>
5  *
6  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
7  */
8
9 #include <libbb.h>
10
11 /* returns a set with the flags not printed */
12 int FAST_FUNC print_flags_separated(const int *masks, const char *labels, int flags, const char *separator)
13 {
14         const char *need_separator = NULL;
15         while (*labels) {
16                 if (flags & *masks) {
17                         printf("%s%s",
18                                 need_separator ? need_separator : "",
19                                 labels);
20                         need_separator = separator;
21                         flags &= ~ *masks;
22                 }
23                 masks++;
24                 labels += strlen(labels) + 1;
25         }
26         return flags;
27 }
28
29 int FAST_FUNC print_flags(const masks_labels_t *ml, int flags)
30 {
31         return print_flags_separated(ml->masks, ml->labels, flags, NULL);
32 }