]> wimlib.net Git - wimlib/blob - include/wimlib/unix_data.h
bf0ee46c0496555dc2ce574d2d417086b1c16c37
[wimlib] / include / wimlib / unix_data.h
1 #ifndef _WIMLIB_UNIX_DATA_H
2 #define _WIMLIB_UNIX_DATA_H
3
4 #include "wimlib/types.h"
5 struct wim_inode;
6 struct wim_lookup_table;
7
8 #define WIMLIB_UNIX_DATA_TAG "$$__wimlib_UNIX_data"
9 #define WIMLIB_UNIX_DATA_TAG_NBYTES (sizeof(WIMLIB_UNIX_DATA_TAG) - 1)
10
11 #define WIMLIB_UNIX_DATA_TAG_UTF16LE "$\0$\0_\0_\0w\0i\0m\0l\0i\0b\0_\0U\0N\0I\0X\0_\0d\0a\0t\0a\0"
12 #define WIMLIB_UNIX_DATA_TAG_UTF16LE_NBYTES (sizeof(WIMLIB_UNIX_DATA_TAG_UTF16LE) - 1)
13
14 extern bool
15 inode_has_unix_data(const struct wim_inode *inode);
16
17 #ifndef __WIN32__
18 /* Format for special alternate data stream entries to store UNIX data for files
19  * and directories (see: WIMLIB_ADD_FLAG_UNIX_DATA) */
20 struct wimlib_unix_data {
21         u16 version; /* Must be 0 */
22         u16 uid;
23         u16 gid;
24         u16 mode;
25 } _packed_attribute;
26
27 #define NO_UNIX_DATA (-1)
28 #define BAD_UNIX_DATA (-2)
29 extern int
30 inode_get_unix_data(const struct wim_inode *inode,
31                     struct wimlib_unix_data *unix_data,
32                     u16 *stream_idx_ret);
33
34 #define UNIX_DATA_UID    0x1
35 #define UNIX_DATA_GID    0x2
36 #define UNIX_DATA_MODE   0x4
37 #define UNIX_DATA_ALL    (UNIX_DATA_UID | UNIX_DATA_GID | UNIX_DATA_MODE)
38 #define UNIX_DATA_CREATE 0x8
39 extern int
40 inode_set_unix_data(struct wim_inode *inode, u16 uid, u16 gid, u16 mode,
41                     struct wim_lookup_table *lookup_table, int which);
42
43 #endif /* __WIN32__  */
44
45 #endif /* _WIMLIB_UNIX_DATA_H  */