struct security_map_node tmp;
const struct avl_tree_node *res;
+ if (disk_security_id == 0) /* No on-disk security ID; uncacheable */
+ return -1;
+
tmp.disk_security_id = disk_security_id;
res = avl_tree_lookup_node(map->root, &tmp.index_node,
_avl_cmp_security_map_nodes);
{
struct security_map_node *node;
+ if (disk_security_id == 0) /* No on-disk security ID; uncacheable */
+ return 0;
+
node = MALLOC(sizeof(*node));
if (!node)
return WIMLIB_ERR_NOMEM;
ns = FIRST_STREAM(ni);
for (u32 i = 0; i < ni->num_streams; i++) {
struct windows_file *windows_file;
- size_t stream_name_nchars;
+ /* Reference the stream by path if it's a named data stream, or
+ * if the volume doesn't support "open by file ID", or if the
+ * application hasn't explicitly opted in to "open by file ID".
+ * Otherwise, only save the inode number (file ID). */
if (*ns->name ||
- !(ctx->vol_flags & FILE_SUPPORTS_OPEN_BY_FILE_ID))
+ !(ctx->vol_flags & FILE_SUPPORTS_OPEN_BY_FILE_ID) ||
+ !(ctx->params->add_flags & WIMLIB_ADD_FLAG_FILE_PATHS_UNNEEDED))
{
- /* Named data stream: reference by path */
- stream_name_nchars = wcslen(ns->name);
windows_file = alloc_windows_file(path,
path_nchars,
ns->name,
- stream_name_nchars,
+ wcslen(ns->name),
ctx->snapshot,
false);
} else {
- /* Unamed data stream: reference by file ID (inode number) */
- stream_name_nchars = 0;
windows_file = alloc_windows_file_for_file_id(ni->ino,
path,
ctx->params->capture_root_nchars + 1,