libcli/smb Move attrib_string in common
[samba.git] / libcli / smb / util.c
1 /*
2    Unix SMB/CIFS implementation.
3    client file operations
4    Copyright (C) Andrew Tridgell 1994-1998
5    Copyright (C) Jeremy Allison 2001-2002
6    Copyright (C) James Myers 2003
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #include "includes.h"
23 #include "libcli/smb/smb_common.h"
24
25 /**
26  Return a string representing a CIFS attribute for a file.
27 **/
28 char *attrib_string(TALLOC_CTX *mem_ctx, uint32_t attrib)
29 {
30         int i, len;
31         const struct {
32                 char c;
33                 uint16_t attr;
34         } attr_strs[] = {
35                 {'V', FILE_ATTRIBUTE_VOLUME},
36                 {'D', FILE_ATTRIBUTE_DIRECTORY},
37                 {'A', FILE_ATTRIBUTE_ARCHIVE},
38                 {'H', FILE_ATTRIBUTE_HIDDEN},
39                 {'S', FILE_ATTRIBUTE_SYSTEM},
40                 {'N', FILE_ATTRIBUTE_NORMAL},
41                 {'R', FILE_ATTRIBUTE_READONLY},
42                 {'d', FILE_ATTRIBUTE_DEVICE},
43                 {'t', FILE_ATTRIBUTE_TEMPORARY},
44                 {'s', FILE_ATTRIBUTE_SPARSE},
45                 {'r', FILE_ATTRIBUTE_REPARSE_POINT},
46                 {'c', FILE_ATTRIBUTE_COMPRESSED},
47                 {'o', FILE_ATTRIBUTE_OFFLINE},
48                 {'n', FILE_ATTRIBUTE_NONINDEXED},
49                 {'e', FILE_ATTRIBUTE_ENCRYPTED}
50         };
51         char *ret;
52
53         ret = talloc_array(mem_ctx, char, ARRAY_SIZE(attr_strs)+1);
54         if (!ret) {
55                 return NULL;
56         }
57
58         for (len=i=0; i<ARRAY_SIZE(attr_strs); i++) {
59                 if (attrib & attr_strs[i].attr) {
60                         ret[len++] = attr_strs[i].c;
61                 }
62         }
63
64         ret[len] = 0;
65
66         talloc_set_name_const(ret, ret);
67
68         return ret;
69 }