print_flags.c 802 B

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