Lines Matching refs:dentries

87 	struct dentry dentries = {
95 root_inode = make_directory(0, 1, &dentries, 1);
97 *dentries.inode = inode;
98 inode_set_permissions(inode, dentries.mode,
99 dentries.uid, dentries.gid, dentries.mtime);
133 struct dentry *dentries;
160 dentries = calloc(entries, sizeof(struct dentry));
161 if (dentries == NULL)
165 dentries[i].filename = strdup(namelist[i]->d_name);
166 if (dentries[i].filename == NULL)
169 asprintf(&dentries[i].path, "%s%s", dir_path, namelist[i]->d_name);
170 asprintf(&dentries[i].full_path, "%s%s", full_path, namelist[i]->d_name);
174 ret = lstat(dentries[i].full_path, &stat);
182 dentries[i].size = stat.st_size;
183 dentries[i].mode = stat.st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO);
184 dentries[i].mtime = stat.st_mtime;
192 fs_config_func(dentries[i].path, dir, &uid, &gid, &mode, &capabilities);
193 dentries[i].mode = mode;
194 dentries[i].uid = uid;
195 dentries[i].gid = gid;
196 dentries[i].capabilities = capabilities;
203 if (selabel_lookup(sehnd, &dentries[i].secon, dentries[i].path, stat.st_mode) < 0) {
204 error("cannot lookup security context for %s", dentries[i].path);
207 if (dentries[i].secon && verbose)
208 printf("Labeling %s as %s\n", dentries[i].path, dentries[i].secon);
213 dentries[i].file_type = EXT4_FT_REG_FILE;
215 dentries[i].file_type = EXT4_FT_DIR;
218 dentries[i].file_type = EXT4_FT_CHRDEV;
220 dentries[i].file_type = EXT4_FT_BLKDEV;
222 dentries[i].file_type = EXT4_FT_FIFO;
224 dentries[i].file_type = EXT4_FT_SOCK;
226 dentries[i].file_type = EXT4_FT_SYMLINK;
227 dentries[i].link = calloc(info.block_size, 1);
228 readlink(dentries[i].full_path, dentries[i].link, info.block_size - 1);
230 error("unknown file type on %s", dentries[i].path);
238 /* insert a lost+found directory at the beginning of the dentries */
241 memcpy(tmp + 1, dentries, entries * sizeof(struct dentry));
242 dentries = tmp;
244 dentries[0].filename = strdup("lost+found");
245 asprintf(&dentries[0].path, "%slost+found", dir_path);
246 dentries[0].full_path = NULL;
247 dentries[0].size = 0;
248 dentries[0].mode = S_IRWXU;
249 dentries[0].file_type = EXT4_FT_DIR;
250 dentries[0].uid = 0;
251 dentries[0].gid = 0;
253 if (selabel_lookup(sehnd, &dentries[0].secon, dentries[0].path, dentries[0].mode) < 0)
254 error("cannot lookup security context for %s", dentries[0].path);
260 inode = make_directory(dir_inode, entries, dentries, dirs);
263 if (dentries[i].file_type == EXT4_FT_REG_FILE) {
264 entry_inode = make_file(dentries[i].full_path, dentries[i].size);
265 } else if (dentries[i].file_type == EXT4_FT_DIR) {
268 if (dentries[i].full_path) {
269 ret = asprintf(&subdir_full_path, "%s/", dentries[i].full_path);
273 ret = asprintf(&subdir_dir_path, "%s/", dentries[i].path);
280 } else if (dentries[i].file_type == EXT4_FT_SYMLINK) {
281 entry_inode = make_link(dentries[i].link);
283 error("unknown file type on %s", dentries[i].path);
286 *dentries[i].inode = entry_inode;
288 ret = inode_set_permissions(entry_inode, dentries[i].mode,
289 dentries[i].uid, dentries[i].gid,
290 dentries[i].mtime);
292 error("failed to set permissions on %s\n", dentries[i].path);
301 ret = inode_set_selinux(entry_inode, dentries[i].secon);
303 error("failed to set SELinux context on %s\n", dentries[i].path);
304 ret = inode_set_capabilities(entry_inode, dentries[i].capabilities);
306 error("failed to set capability on %s\n", dentries[i].path);
308 free(dentries[i].path);
309 free(dentries[i].full_path);
310 free(dentries[i].link);
311 free((void *)dentries[i].filename);
312 free(dentries[i].secon);
315 free(dentries);