Lines Matching refs:de

193 	struct devfs_dirent *de;
195 TAILQ_FOREACH(de, &dd->de_dlist, de_list) {
196 if (namelen != de->de_dirent->d_namlen)
198 if (type != 0 && type != de->de_dirent->d_type)
206 if (de->de_dirent->d_type == DT_CHR &&
207 (de->de_cdp->cdp_flags & CDP_ACTIVE) == 0)
210 if (bcmp(name, de->de_dirent->d_name, namelen) != 0)
214 KASSERT(de == NULL || (de->de_flags & DE_DOOMED) == 0,
216 return (de);
223 struct devfs_dirent *de;
227 i = sizeof(*de) + GENERIC_DIRSIZ(&d);
228 de = malloc(i, M_DEVFS3, M_WAITOK | M_ZERO);
229 de->de_dirent = (struct dirent *)(de + 1);
230 de->de_dirent->d_namlen = namelen;
231 de->de_dirent->d_reclen = GENERIC_DIRSIZ(&d);
232 bcopy(name, de->de_dirent->d_name, namelen);
233 dirent_terminate(de->de_dirent);
234 vfs_timestamp(&de->de_ctime);
235 de->de_mtime = de->de_atime = de->de_ctime;
236 de->de_links = 1;
237 de->de_holdcnt = 1;
239 mac_devfs_init(de);
241 return (de);
245 devfs_parent_dirent(struct devfs_dirent *de)
248 if (de->de_dirent->d_type != DT_DIR)
249 return (de->de_dir);
251 if (de->de_flags & (DE_DOT | DE_DOTDOT))
254 de = TAILQ_FIRST(&de->de_dlist); /* "." */
255 if (de == NULL)
257 de = TAILQ_NEXT(de, de_list); /* ".." */
258 if (de == NULL)
261 return (de->de_dir);
269 struct devfs_dirent *de;
289 de = devfs_newdirent(".", 1);
290 de->de_dirent->d_type = DT_DIR;
291 de->de_flags |= DE_DOT;
292 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list);
293 de->de_dir = dd;
296 de = devfs_newdirent("..", 2);
297 de->de_dirent->d_type = DT_DIR;
298 de->de_flags |= DE_DOTDOT;
299 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list);
301 de->de_dir = dd;
303 de->de_dir = dotdot;
317 devfs_dirent_free(struct devfs_dirent *de)
321 vp = de->de_vnode;
323 if (vp != NULL && vp->v_data == de)
326 free(de, M_DEVFS3);
334 devfs_rmdir_empty(struct devfs_mount *dm, struct devfs_dirent *de)
341 KASSERT(de->de_dirent->d_type == DT_DIR,
342 ("devfs_rmdir_empty: de is not a directory"));
344 if ((de->de_flags & DE_DOOMED) != 0 || de == dm->dm_rootdir)
347 de_dot = TAILQ_FIRST(&de->de_dlist);
355 dd = devfs_parent_dirent(de);
357 TAILQ_REMOVE(&de->de_dlist, de_dot, de_list);
358 TAILQ_REMOVE(&de->de_dlist, de_dotdot, de_list);
359 TAILQ_REMOVE(&dd->de_dlist, de, de_list);
361 devfs_delete(dm, de, DEVFS_DEL_NORECURSE);
369 de = dd;
378 devfs_delete(struct devfs_mount *dm, struct devfs_dirent *de, int flags)
383 KASSERT((de->de_flags & DE_DOOMED) == 0,
385 de->de_flags |= DE_DOOMED;
388 dd = devfs_parent_dirent(de);
391 if (de->de_flags & DE_USER) {
399 vp = de->de_vnode;
411 if (de->de_symlink) {
412 free(de->de_symlink, M_DEVFS);
413 de->de_symlink = NULL;
416 mac_devfs_destroy(de);
418 if (de->de_inode > DEVFS_ROOTINO) {
419 devfs_free_cdp_inode(de->de_inode);
420 de->de_inode = 0;
422 if (DEVFS_DE_DROP(de))
423 devfs_dirent_free(de);
442 struct devfs_dirent *de;
453 de = TAILQ_LAST(&dd->de_dlist, devfs_dlist_head);
454 if (de == NULL)
456 TAILQ_REMOVE(&dd->de_dlist, de, de_list);
457 if (de->de_flags & DE_USER)
459 if (de->de_flags & (DE_DOT | DE_DOTDOT))
460 devfs_delete(dm, de, DEVFS_DEL_NORECURSE);
461 else if (de->de_dirent->d_type == DT_DIR)
462 devfs_purge(dm, de);
464 devfs_delete(dm, de, DEVFS_DEL_NORECURSE);
512 struct devfs_dirent *de;
533 de = cdp->cdp_dirents[dm->dm_idx];
535 KASSERT(cdp == de->de_cdp,
537 cdp->cdp_c.si_name, cdp, de->de_cdp));
538 KASSERT(de->de_dir != NULL, ("Null de->de_dir"));
541 TAILQ_REMOVE(&de->de_dir->de_dlist, de, de_list);
542 de->de_cdp = NULL;
543 de->de_inode = 0;
544 devfs_delete(dm, de, 0);
571 de = cdp->cdp_dirents[dm->dm_idx];
572 KASSERT(cdp == de->de_cdp, ("inconsistent cdp"));
589 de = devfs_find(dd, s, q - s, 0);
590 if (de == NULL)
591 de = devfs_vmkdir(dm, s, q - s, dd, 0);
592 else if (de->de_dirent->d_type == DT_LNK) {
593 de = devfs_find(dd, s, q - s, DT_DIR);
594 if (de == NULL)
595 de = devfs_vmkdir(dm, s, q - s, dd, 0);
596 de->de_flags |= DE_COVERED;
599 dd = de;
606 de = devfs_find(dd, s, q - s, DT_LNK);
607 if (de != NULL)
610 de = devfs_newdirent(s, q - s);
612 de->de_uid = 0;
613 de->de_gid = 0;
614 de->de_mode = 0755;
615 de->de_dirent->d_type = DT_LNK;
623 de->de_symlink = malloc(j, M_DEVFS, M_WAITOK);
624 de->de_symlink[0] = 0;
626 strcat(de->de_symlink, "../");
627 strcat(de->de_symlink, pdev->si_name);
629 de->de_uid = cdp->cdp_c.si_uid;
630 de->de_gid = cdp->cdp_c.si_gid;
631 de->de_mode = cdp->cdp_c.si_mode;
632 de->de_dirent->d_type = DT_CHR;
634 de->de_flags |= de_flags;
635 de->de_inode = cdp->cdp_inode;
636 de->de_cdp = cdp;
639 &cdp->cdp_c, de);
641 de->de_dir = dd;
642 TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list);
643 devfs_rules_apply(dm, de);
648 cdp->cdp_dirents[dm->dm_idx] = de;
649 KASSERT(de->de_cdp != (void *)0xdeadc0de,