#ifdef HIDDEN_MOUNTPOINT
static struct mount *devfs_hidden_mount;
-#endif HIDDEN_MOINTPOINT
+#endif /* HIDDEN_MOINTPOINT */
static int devfs_ready = 0;
devfs_mount(devfs_hidden_mount,"dummy",NULL,NULL,NULL);
dev_root->de_dnp->dn_dvm
= (struct devfsmount *)devfs_hidden_mount->mnt_data;
-#endif HIDDEN_MOUNTPOINT
+#endif /* HIDDEN_MOUNTPOINT */
devfs_ready = 1;
return (0);
}
return 0;
}
}
-#endif 0
+#endif
/***********************************************************************\
* Given a starting node (0 for root) and a pathname, return the node *
* for the end item on the path. It MUST BE A DIRECTORY. If the 'CREATE' *
scan++;
strncpy(component, start, scan - start);
+ component[ scan - start ] = '\0';
if (*scan == '/')
scan++;
if (dnp->dn_vn == NULL) {
#if 0
printf("devfs_dn_free: free'ing %x\n", (unsigned int)dnp);
-#endif 0
+#endif
devnode_free(dnp); /* no accesses/references */
}
else {
#if 0
printf("devfs_dn_free: marking %x for deletion\n",
(unsigned int)dnp);
-#endif 0
+#endif
dnp->dn_delete = TRUE;
}
}
devnode_t * dnp = ((devdirent_t *)dirent_p)->de_dnp;
devnode_t * dnp2;
boolean_t funnel_state;
+ boolean_t lastlink;
funnel_state = thread_funnel_set(kernel_flock, TRUE);
dnp->dn_nextsibling->dn_prevsiblingp = &(dnp->dn_nextsibling);
dnp2->dn_nextsibling = dnp2;
dnp2->dn_prevsiblingp = &(dnp2->dn_nextsibling);
- while(dnp2->dn_linklist) {
- dev_free_name(dnp2->dn_linklist);
+ if(dnp2->dn_linklist) {
+ do {
+ lastlink = (1 == dnp2->dn_links);
+ dev_free_name(dnp2->dn_linklist);
+ } while (!lastlink);
}
}
* If we are not running in SPLIT_DEVS mode, then
* THIS is what gets rid of the propogated nodes.
*/
- while(dnp->dn_linklist) {
- dev_free_name(dnp->dn_linklist);
+ if(dnp->dn_linklist) {
+ do {
+ lastlink = (1 == dnp->dn_links);
+ dev_free_name(dnp->dn_linklist);
+ } while (!lastlink);
}
DEVFS_UNLOCK(0);
out: