bitmap to strings
authorLuke Leighton <lkcl@samba.org>
Tue, 16 Feb 1999 18:02:50 +0000 (18:02 +0000)
committerLuke Leighton <lkcl@samba.org>
Tue, 16 Feb 1999 18:02:50 +0000 (18:02 +0000)
(This used to be commit ba5919bcaefa792bae503c7ab19d4b7bbf9bb954)

source3/lib/util_str.c
source3/rpcclient/display.c

index a55d4cd8dc60e1d7b2b1608cde5359353154c042..31dc9bfd62c3150fc80f94797116a825a98a1897 100644 (file)
@@ -1089,3 +1089,73 @@ void split_at_last_component(char *path, char *front, char sep, char *back)
                }
        }
 }
+
+/****************************************************************************
+convert a bit field to a string.  if you want multiple bits to be detected
+set them first, e.g SV_TYPE_ALL to be "All" or "Full Control" for ACB_INFOs.
+
+strings are expected to contain their own separators, although the code
+below only assumes that separators are spaces.
+
+****************************************************************************/
+char *bit_field_to_str(uint32 type, struct field_info *bs)
+{
+       static fstring typestr;
+       int i = 0;
+
+       typestr[0] = 0;
+
+       if (type == 0 || bs == NULL)
+       {
+               return NULL;
+       }
+
+       while (bs[i].str != NULL && type != 0)
+       {
+               if (IS_BITS_SET_ALL(bs[i].bits, type))
+               {
+                       fstrcat(typestr, bs[i].str);
+                       type &= ~bs[i].bits;
+               }
+               i++;
+       }
+       
+       i = strlen(typestr)-1;
+       if (i > 0 && typestr[i] == ' ')
+       {
+               typestr[i] = 0;
+       }
+
+       return typestr;
+}
+
+/****************************************************************************
+convert an enumeration to a string.  first item is the default.
+****************************************************************************/
+char *enum_field_to_str(uint32 type, struct field_info *bs, BOOL first_default)
+{
+       int i = 0;
+
+       if (bs == NULL)
+       {
+               return NULL;
+       }
+
+       while (bs[i].str != NULL && type != 0)
+       {
+               if (bs[i].bits == type)
+               {
+                       return bs[i].str;
+               }
+               i++;
+       }
+
+       /* oops - none found */
+
+       if (first_default)
+       {
+               return bs[0].str;
+       }
+
+       return NULL;
+}
index 0bfed9eba33370c68a6040a79b75d0eaff1863c1..ce464a72e6d04275dca8e6929fd08b6c9ad4355a 100644 (file)
 #include "includes.h"
 
 
+struct field_info sid_name_info[] =
+{
+       { SID_NAME_UNKNOWN, "UNKNOWN"         }, /* default */
+       { SID_NAME_USER   , "User"            },
+       { SID_NAME_DOM_GRP, "Domain Group"    },
+       { SID_NAME_DOMAIN , "Domain"          },
+       { SID_NAME_ALIAS  , "Local Group"     },
+       { SID_NAME_WKN_GRP, "Well-known Group"},
+       { SID_NAME_DELETED, "Deleted"         },
+       { SID_NAME_INVALID, "Invalid"         },
+       { 0               , NULL }
+};
+
 /****************************************************************************
 convert a SID_NAME_USE to a string 
 ****************************************************************************/
 char *get_sid_name_use_str(uint8 sid_name_use)
 {
-       static fstring type;
-
-       switch (sid_name_use)
-       {
-               case SID_NAME_USER    : fstrcpy(type, "User"            ); break;
-               case SID_NAME_DOM_GRP : fstrcpy(type, "Domain Group"    ); break;
-               case SID_NAME_DOMAIN  : fstrcpy(type, "Domain"          ); break;
-               case SID_NAME_ALIAS   : fstrcpy(type, "Local Group"     ); break;
-               case SID_NAME_WKN_GRP : fstrcpy(type, "Well-known Group"); break;
-               case SID_NAME_DELETED : fstrcpy(type, "Deleted"         ); break;
-               case SID_NAME_INVALID : fstrcpy(type, "Invalid"         ); break;
-               case SID_NAME_UNKNOWN : 
-               default               : fstrcpy(type, "UNKNOWN"         ); break;
-       }
-
-       return type;
+       return enum_field_to_str((uint32)sid_name_use, sid_name_info, True);
 }
 
 /****************************************************************************