Home | History | Annotate | Download | only in ext4_utils

Lines Matching full: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);
185 dentries[i].mtime = stat.st_mtime;
187 dentries[i].mtime = fixed_time;
196 fs_config_func(dentries[i].path, dir, &uid, &gid, &mode, &capabilities);
197 dentries[i].mode = mode;
198 dentries[i].uid = uid;
199 dentries[i].gid = gid;
200 dentries[i].capabilities = capabilities;
207 if (selabel_lookup(sehnd, &dentries[i].secon, dentries[i].path, stat.st_mode) < 0) {
208 error("cannot lookup security context for %s", dentries[i].path);
211 if (dentries[i].secon && verbose)
212 printf("Labeling %s as %s\n", dentries[i].path, dentries[i].secon);
217 dentries[i].file_type = EXT4_FT_REG_FILE;
219 dentries[i].file_type = EXT4_FT_DIR;
222 dentries[i].file_type = EXT4_FT_CHRDEV;
224 dentries[i].file_type = EXT4_FT_BLKDEV;
226 dentries[i].file_type = EXT4_FT_FIFO;
228 dentries[i].file_type = EXT4_FT_SOCK;
230 dentries[i].file_type = EXT4_FT_SYMLINK;
231 dentries[i].link = calloc(info.block_size, 1);
232 readlink(dentries[i].full_path, dentries[i].link, info.block_size - 1);
234 error("unknown file type on %s", dentries[i].path);
242 /* insert a lost+found directory at the beginning of the dentries */
245 memcpy(tmp + 1, dentries, entries * sizeof(struct dentry));
246 dentries = tmp;
248 dentries[0].filename = strdup("lost+found");
249 asprintf(&dentries[0].path, "%slost+found", dir_path);
250 dentries[0].full_path = NULL;
251 dentries[0].size = 0;
252 dentries[0].mode = S_IRWXU;
253 dentries[0].file_type = EXT4_FT_DIR;
254 dentries[0].uid = 0;
255 dentries[0].gid = 0;
257 if (selabel_lookup(sehnd, &dentries[0].secon, dentries[0].path, dentries[0].mode) < 0)
258 error("cannot lookup security context for %s", dentries[0].path);
264 inode = make_directory(dir_inode, entries, dentries, dirs);
267 if (dentries[i].file_type == EXT4_FT_REG_FILE) {
268 entry_inode = make_file(dentries[i].full_path, dentries[i].size);
269 } else if (dentries[i].file_type == EXT4_FT_DIR) {
272 if (dentries[i].full_path) {
273 ret = asprintf(&subdir_full_path, "%s/", dentries[i].full_path);
277 ret = asprintf(&subdir_dir_path, "%s/", dentries[i].path);
284 } else if (dentries[i].file_type == EXT4_FT_SYMLINK) {
285 entry_inode = make_link(dentries[i].link);
287 error("unknown file type on %s", dentries[i].path);
290 *dentries[i].inode = entry_inode;
292 ret = inode_set_permissions(entry_inode, dentries[i].mode,
293 dentries[i].uid, dentries[i].gid,
294 dentries[i].mtime);
296 error("failed to set permissions on %s\n", dentries[i].path);
305 ret = inode_set_selinux(entry_inode, dentries[i].secon);
307 error("failed to set SELinux context on %s\n", dentries[i].path);
308 ret = inode_set_capabilities(entry_inode, dentries[i].capabilities);
310 error("failed to set capability on %s\n", dentries[i].path);
312 free(dentries[i].path);
313 free(dentries[i].full_path);
314 free(dentries[i].link);
315 free((void *)dentries[i].filename);
316 free(dentries[i].secon);
319 free(dentries);