Lines Matching +full:sound +full:- +full:name +full:- +full:prefix
17 * information: Portions Copyright [yyyy] [name of copyright owner]
55 /* create or remove nodes or links. unset with -n */
58 /* cleanup mode. Set with -C */
61 /* devlinks -d compatibility */
67 /* flag to enable/disable device allocation with -e/-d */
77 * devices to be deallocated with -d :
88 /* load a single driver only. set with -i */
107 /* build links in /dev. -x to turn off */
110 /* build nodes in /devices. -y to turn off */
113 /* -z to turn off */
128 /* single-threads /dev modification */
138 /* supports the class -c option */
142 /* used with verbose option -v or -V */
149 /* set if -r alternate root given */
167 /* /etc/path_to_inst unless -p used */
170 /* /usr/lib/devfsadm/linkmods unless -l used */
177 /* /etc/devlink.tab unless devlinks -t used */
227 /* Global for no-further-processing hash */
233 * be referred to from a non-global zone. The dirs must be listed in
240 static int lookup_door_fd = -1;
291 root_uid = pw->pw_uid; in main()
300 sys_gid = gp->gr_gid; in main()
355 update_drvconf((major_t)-1, 0); in main()
372 if (chdir("/") == -1) { in main()
567 * useful with -v or -V in parse_args()
573 /* supply a non-default table file */ in parse_args()
603 ap->a_name = dequote(optarg); in parse_args()
604 len = strlen(ap->a_name) + 1; in parse_args()
607 MAXMODCONFNAME, ap->a_name); in parse_args()
611 ap->a_len = len; in parse_args()
615 a_tail->a_next = ap; in parse_args()
673 * useful with -v or -V in parse_args()
707 if ((mc.major == -1) || (mc.drvname[0] == '\0')) { in parse_args()
764 classes[num_classes - 1] = optarg; in parse_args()
826 * useful with -v or -V in parse_args()
840 /* adding a driver update-only */ in parse_args()
897 * Load minor perm before force-loading drivers in parse_args()
905 update_drvconf((major_t)-1, 0); in parse_args()
921 classes[num_classes - 1] = compat_class; in parse_args()
941 /* useful with -v or -V */ in parse_args()
985 char *msg, *name; in devi_tree_walk() local
990 " error=%d, flags=%u\n", dcip->dci_root, in devi_tree_walk()
991 dcip->dci_minor ? dcip->dci_minor : "<NULL>", in devi_tree_walk()
992 dcip->dci_driver ? dcip->dci_driver : "<NULL>", dcip->dci_error, in devi_tree_walk()
993 dcip->dci_flags); in devi_tree_walk()
995 assert(dcip->dci_root); in devi_tree_walk()
997 if (dcip->dci_flags & DCA_LOAD_DRV) { in devi_tree_walk()
998 node = di_init_driver(dcip->dci_driver, flags); in devi_tree_walk()
1000 name = dcip->dci_driver; in devi_tree_walk()
1002 node = di_init(dcip->dci_root, flags); in devi_tree_walk()
1004 name = dcip->dci_root; in devi_tree_walk()
1008 dcip->dci_error = errno; in devi_tree_walk()
1016 if (!(errno == ENXIO && (dcip->dci_flags & DCA_HOT_PLUG))) in devi_tree_walk()
1017 err_print(msg, name, strerror(dcip->dci_error)); in devi_tree_walk()
1021 if (dcip->dci_flags & DCA_FLUSH_PATHINST) in devi_tree_walk()
1024 dcip->dci_arg = &mlist; in devi_tree_walk()
1034 dcip->dci_arg = NULL; in devi_tree_walk()
1041 build_and_enq_event(EC_DEV_ADD, ev_subclass, dcip->dci_root, in devi_tree_walk()
1042 node, dcip->dci_minor); in devi_tree_walk()
1062 dep = dcip->dci_arg; in process_deferred_links()
1067 dcip->dci_arg = NULL; in process_deferred_links()
1070 assert((dep->head == NULL) ^ (dep->tail != NULL)); in process_deferred_links()
1073 for (smp = NULL, mp = dep->head; mp; mp = mp->next) { in process_deferred_links()
1075 (void) check_minor_type(mp->node, mp->minor, dcip); in process_deferred_links()
1084 * Called in non-daemon mode to take a snap shot of the devinfo tree.
1087 * Except in the devfsadm -i (single driver case), the flags used by devfsadm
1096 char name[MAXNAMELEN]; in process_devinfo_tree() local
1110 update_drvconf((major_t)-1, in process_devinfo_tree()
1124 (void) snprintf(name, sizeof (name), "%s", driver); in process_devinfo_tree()
1125 dci.dci_driver = name; in process_devinfo_tree()
1150 * For devlinks, disks, ports, tapes and devfsadm -n, in process_devinfo_tree()
1163 /* handle pre-cleanup operations desired by the modules. */ in process_devinfo_tree()
1173 /* handle post-cleanup operations desired by the modules. */ in process_devinfo_tree()
1193 if (lookup_door_fd != -1) { in revoke_lookup_door()
1194 if (door_revoke(lookup_door_fd) == -1) { in revoke_lookup_door()
1195 err_print("door_revoke of %s failed - %s\n", in revoke_lookup_door()
1274 if ((fd = open(door_file, O_RDWR | O_CREAT, SYNCH_DOOR_PERMS)) == -1) { in daemon_update()
1282 DOOR_REFUSE_DESC | DOOR_NO_CANCEL)) == -1) { in daemon_update()
1289 if (fattach(fd, door_file) == -1) { in daemon_update()
1308 if ((fd = open(door_file, O_RDWR | O_CREAT, S_IRUSR|S_IWUSR)) == -1) { in daemon_update()
1316 DOOR_REFUSE_DESC)) == -1) { in daemon_update()
1326 if (fattach(fd, door_file) == -1) { in daemon_update()
1336 /* pass down the door name to kernel for door_ki_open */ in daemon_update()
1361 dcp->dca_error = EPERM; in sync_handler()
1371 * Root is always present and is the first component of "name" member in sync_handler()
1373 assert(dcp->dca_root == 0); in sync_handler()
1381 dci.dci_root = &dcp->dca_name[dcp->dca_root]; in sync_handler()
1382 dci.dci_minor = dcp->dca_minor ? &dcp->dca_name[dcp->dca_minor] : NULL; in sync_handler()
1384 dcp->dca_driver ? &dcp->dca_name[dcp->dca_driver] : NULL; in sync_handler()
1386 dci.dci_flags = dcp->dca_flags | (dci.dci_driver ? DCA_LOAD_DRV : 0); in sync_handler()
1391 dcp->dca_error = dci.dci_error; in sync_handler()
1393 if (dcp->dca_flags & DCA_DEVLINK_SYNC) in sync_handler()
1528 * Check that if -r is set, it is not any part of a zone--- that is, that
1535 char *name; in zone_pathcheck() local
1554 if (resolvepath(checkpath, root, sizeof (root) - 1) == -1) { in zone_pathcheck()
1556 * In this case the user has done "devfsadm -r" on some path in zone_pathcheck()
1563 if (strlen(root) > 0 && (root[strlen(root) - 1] != '/')) { in zone_pathcheck()
1569 while ((name = getzoneent(cookie)) != NULL) { in zone_pathcheck()
1571 if (strcmp(name, GLOBAL_ZONENAME) == 0) { in zone_pathcheck()
1572 free(name); in zone_pathcheck()
1576 if (zone_get_zonepath(name, zroot, sizeof (zroot)) != Z_OK) { in zone_pathcheck()
1577 free(name); in zone_pathcheck()
1582 if (resolvepath(zroot, rzroot, sizeof (rzroot) - 1) == -1) { in zone_pathcheck()
1585 * so we try using the non-resolved pathname. in zone_pathcheck()
1589 if (strlen(rzroot) > 0 && (rzroot[strlen(rzroot) - 1] != '/')) { in zone_pathcheck()
1599 err_print(ZONE_PATHCHECK, root, name); in zone_pathcheck()
1601 free(name); in zone_pathcheck()
1604 free(name); in zone_pathcheck()
1616 * devfsadmd set-up via private libsysevent interfaces. This handler is
1636 * If this is event-driven, then we cannot trust the static devlist in event_handler()
1677 instance = -1; in event_handler()
1746 dcip->dci_root = root; in dca_impl_init()
1747 dcip->dci_minor = minor; in dca_impl_init()
1748 dcip->dci_driver = NULL; in dca_impl_init()
1749 dcip->dci_error = 0; in dca_impl_init()
1750 dcip->dci_flags = 0; in dca_impl_init()
1751 dcip->dci_arg = NULL; in dca_impl_init()
1770 * started with -i option. in add_minor_pathname()
1823 dep = dcip->dci_arg; in check_minor_type()
1829 * as we want the actual driver name. This check is in check_minor_type()
1833 ((dcip->dci_driver && !is_descendent_of(node, dcip->dci_driver)) || in check_minor_type()
1834 (dcip->dci_minor && strcmp(mn, dcip->dci_minor)))) { in check_minor_type()
1838 if ((dcip->dci_flags & DCA_CHECK_TYPE) && in check_minor_type()
1841 dcip->dci_flags &= ~DCA_CHECK_TYPE; in check_minor_type()
1865 if (cdep != NULL && cdep->head != NULL) { in check_minor_type()
1866 assert(cdep->tail != NULL); in check_minor_type()
1868 dcip->dci_arg = cdep; in check_minor_type()
1870 dcip->dci_arg = dep; in check_minor_type()
1931 for (create = create_head; create != NULL; create = create->next) { in minor_process()
1933 class_ok(create->create->device_class) == in minor_process()
1935 if (call_minor_init(create->modptr) == in minor_process()
1948 if (dep && ((create->create->flags & CREATE_MASK) == in minor_process()
1953 ((create->create->flags & CREATE_MASK) != in minor_process()
1958 if ((*(create->create->callback_fcn)) in minor_process()
1992 mp->node = node; in cache_deferred_minor()
1993 mp->minor = minor; in cache_deferred_minor()
1994 mp->next = NULL; in cache_deferred_minor()
1996 assert(dep->head == NULL || dep->tail != NULL); in cache_deferred_minor()
1997 if (dep->head == NULL) { in cache_deferred_minor()
1998 dep->head = mp; in cache_deferred_minor()
2000 dep->tail->next = mp; in cache_deferred_minor()
2002 dep->tail = mp; in cache_deferred_minor()
2014 if (create->create->node_type != NULL) { in minor_matches_rule()
2019 switch (create->create->flags & TYPE_MASK) { in minor_matches_rule()
2021 if (strcmp(create->create->node_type, m_nodetype) != in minor_matches_rule()
2027 if (strncmp(create->create->node_type, m_nodetype, in minor_matches_rule()
2028 strlen(create->create->node_type)) != 0) { in minor_matches_rule()
2033 if (regexec(&(create->node_type_comp), m_nodetype, in minor_matches_rule()
2041 if (create->create->drv_name != NULL) { in minor_matches_rule()
2043 switch (create->create->flags & DRV_MASK) { in minor_matches_rule()
2045 if (strcmp(create->create->drv_name, m_drvname) != 0) { in minor_matches_rule()
2050 if (regexec(&(create->drv_name_comp), m_drvname, in minor_matches_rule()
2106 create_head = create_head->next; in unload_modules()
2108 if ((create_free->create->flags & TYPE_RE) == TYPE_RE) { in unload_modules()
2109 regfree(&(create_free->node_type_comp)); in unload_modules()
2111 if ((create_free->create->flags & DRV_RE) == DRV_RE) { in unload_modules()
2112 regfree(&(create_free->drv_name_comp)); in unload_modules()
2119 remove_head = remove_head->next; in unload_modules()
2125 if ((module_head->minor_fini != NULL) && in unload_modules()
2126 ((module_head->flags & MODULE_ACTIVE) == MODULE_ACTIVE)) { in unload_modules()
2127 (void) (*(module_head->minor_fini))(); in unload_modules()
2130 vprint(MODLOAD_MID, "unloading module %s\n", module_head->name); in unload_modules()
2131 free(module_head->name); in unload_modules()
2132 (void) dlclose(module_head->dlhandle); in unload_modules()
2135 module_head = module_head->next; in unload_modules()
2169 (void) strncpy(cdir, mdir, last - mdir); in load_modules()
2170 cdir[last - mdir] = '\0'; in load_modules()
2181 if ((strcmp(entp->d_name, ".") == 0) || in load_modules()
2182 (strcmp(entp->d_name, "..") == 0)) { in load_modules()
2186 load_module(entp->d_name, cdir); in load_modules()
2251 module->name = s_strdup(epath); in load_module()
2252 module->dlhandle = dlhandle; in load_module()
2255 module->minor_fini = (int (*)())dlsym(dlhandle, MINOR_FINI); in load_module()
2256 module->minor_init = (int (*)())dlsym(dlhandle, MINOR_INIT); in load_module()
2257 module->flags = 0; in load_module()
2264 for (i = 0; i < create_reg->count; i++) { in load_module()
2265 int flags = create_reg->tblp[i].flags; in load_module()
2270 create_list_element->create = &(create_reg->tblp[i]); in load_module()
2271 create_list_element->modptr = module; in load_module()
2283 (create_reg->tblp[i].node_type == NULL)) { in load_module()
2304 if ((n = regcomp(&(create_list_element-> in load_module()
2306 create_reg->tblp[i].node_type, in load_module()
2310 create_reg->tblp[i].node_type, n); in load_module()
2317 (create_reg->tblp[i].drv_name == NULL)) { in load_module()
2319 regfree(&(create_list_element-> in load_module()
2333 regfree(&(create_list_element-> in load_module()
2344 if ((create_reg->tblp[i].flags & DRV_RE) == DRV_RE) { in load_module()
2345 if ((n = regcomp(&(create_list_element-> in load_module()
2347 create_reg->tblp[i].drv_name, in load_module()
2350 regfree(&(create_list_element-> in load_module()
2355 create_reg->tblp[i].drv_name, n); in load_module()
2365 (*create_list_next)->create->interpose_lvl >= in load_module()
2366 create_list_element->create->interpose_lvl; in load_module()
2367 create_list_next = &((*create_list_next)->next)) in load_module()
2369 create_list_element->next = *create_list_next; in load_module()
2380 if (remove_reg->version < DEVFSADM_V1) in load_module()
2382 for (i = 0; i < remove_reg->count; i++) { in load_module()
2387 remove_list_element->remove = &(remove_reg->tblp[i]); in load_module()
2388 remove_list_element->remove->flags |= flags; in load_module()
2389 remove_list_element->modptr = module; in load_module()
2393 (*remove_list_next)->remove->interpose_lvl >= in load_module()
2394 remove_list_element->remove->interpose_lvl; in load_module()
2395 remove_list_next = &((*remove_list_next)->next)) in load_module()
2397 remove_list_element->next = *remove_list_next; in load_module()
2402 module->next = module_head; in load_module()
2459 if ((module->flags & MODULE_ACTIVE) == MODULE_ACTIVE) { in call_minor_init()
2464 fcn, module->name); in call_minor_init()
2466 if (module->minor_init == NULL) { in call_minor_init()
2467 module->flags |= MODULE_ACTIVE; in call_minor_init()
2472 if ((*(module->minor_init))() == DEVFSADM_FAILURE) { in call_minor_init()
2473 err_print(FAILED_FOR_MODULE, MINOR_INIT, module->name); in call_minor_init()
2480 module->flags |= MODULE_ACTIVE; in call_minor_init()
2547 if (link[i-1] == '/') { in devfsadm_mklink()
2548 numslashes--; in devfsadm_mklink()
2554 } while (numslashes-- != 0); in devfsadm_mklink()
2643 while (tpath != primary_link && *(tpath-1) != '/') { in devfsadm_secondary_link()
2644 tpath--; in devfsadm_secondary_link()
2727 " %s -> %s\n", devlink, contents); in create_link_common()
2803 " %s -> %s\n", devlink, contents); in create_link_common()
2849 * Normally, /etc/logindevperm has few (8 - 10 entries) which in set_logindev_perms()
2853 for (newdev = login_dev_cache; newdev; newdev = newdev->ldev_next) { in set_logindev_perms()
2855 newdev->ldev_device); in set_logindev_perms()
2857 if (regexec(&newdev->ldev_device_regex, devlink, 0, in set_logindev_perms()
2860 newdev->ldev_device); in set_logindev_perms()
2874 * We dont need redirection here - the actual link contents in set_logindev_perms()
2892 vprint(FILES_MID, "link=%s->physpath=%s\n", in set_logindev_perms()
2907 list = newdev->ldev_driver_list; in set_logindev_perms()
2910 if (strcmp(list->driver_name, in set_logindev_perms()
2916 list = list->next; in set_logindev_perms()
2936 * stat() the console device newdev->ldev_console in set_logindev_perms()
2937 * which will always exist - it will have the right owner but in set_logindev_perms()
2940 * Note, it is safe to use name service here since if name services in set_logindev_perms()
2941 * are not available (during boot or in single-user mode), then in set_logindev_perms()
2945 if (stat(newdev->ldev_console, &sb) == -1) { in set_logindev_perms()
2946 vprint(VERBOSE_MID, STAT_FAILED, newdev->ldev_console, in set_logindev_perms()
2962 sb.st_gid = resp->pw_gid; in set_logindev_perms()
2964 if (chmod(devlink, newdev->ldev_perms) == -1) { in set_logindev_perms()
2970 if (chown(devlink, sb.st_uid, sb.st_gid) == -1) { in set_logindev_perms()
3031 if ((stat(phy_path, &sb) == -1) || (sb.st_rdev != dev)) { in reset_node_permissions()
3051 * preserve existing/user-modified ownership and in reset_node_permissions()
3105 if (chmod(phy_path, mode) == -1) in reset_node_permissions()
3111 if (chown(phy_path, uid, gid) == -1) in reset_node_permissions()
3138 * Note: we don't remove /devices (non-links) entries because they are in devfsadm_rm_work()
3224 return (-1); in s_rmdir()
3290 * "dev/cXt[0-9]+d[0-9]+s[0-9]+". After the cache is built, consistency must
3344 assert(head->nextlink == NULL); in devfsadm_rm_stale_links()
3346 for (link = head->link; link != NULL; link = head->nextlink) { in devfsadm_rm_stale_links()
3350 head->nextlink = link->next; in devfsadm_rm_stale_links()
3351 if ((strcmp(link->contents, valid_link_contents) == 0) && in devfsadm_rm_stale_links()
3352 (strcmp(link->devlink, valid_link) != 0)) { in devfsadm_rm_stale_links()
3353 vprint(CHATTY_MID, "removing %s -> %s\n" in devfsadm_rm_stale_links()
3354 "valid link is: %s -> %s\n", in devfsadm_rm_stale_links()
3355 link->devlink, link->contents, in devfsadm_rm_stale_links()
3358 * Use a copy of the cached link name as the in devfsadm_rm_stale_links()
3362 link->devlink); in devfsadm_rm_stale_links()
3381 linkhead = linkhead->nexthead) { in get_cached_links()
3382 if (strcmp(linkhead->dir_re, dir_re) == 0) { in get_cached_links()
3392 linkhead->nexthead = headlinkhead; in get_cached_links()
3394 linkhead->dir_re = s_strdup(dir_re); in get_cached_links()
3396 if ((n = regcomp(&(linkhead->dir_re_compiled), dir_re, in get_cached_links()
3401 linkhead->nextlink = NULL; in get_cached_links()
3402 linkhead->link = NULL; in get_cached_links()
3447 * non-symlink files(EINVAL) from false regexec matches. in build_devlink_list()
3465 * /dev/audio -> /dev/sound/0 in build_devlink_list()
3471 vprint(REMOVE_MID, "%s%s -> %s invalid " in build_devlink_list()
3510 link->devlink = s_strdup(r_devlink); in build_devlink_list()
3512 link->contents = s_strdup(r_contents); in build_devlink_list()
3514 link->next = linkhead->link; in build_devlink_list()
3515 linkhead->link = link; in build_devlink_list()
3534 vprint(CACHE_MID, "add_link_to_cache: %s -> %s ", in add_link_to_cache()
3538 linkhead = linkhead->nexthead) { in add_link_to_cache()
3539 if (regexec(&(linkhead->dir_re_compiled), devlink, 0, NULL, 0) in add_link_to_cache()
3543 link->devlink = s_strdup(devlink); in add_link_to_cache()
3544 link->contents = s_strdup(physpath); in add_link_to_cache()
3545 link->next = linkhead->link; in add_link_to_cache()
3546 linkhead->link = link; in add_link_to_cache()
3568 linkhead = linkhead->nexthead) { in rm_link_from_cache()
3569 if (regexec(&(linkhead->dir_re_compiled), devlink, 0, NULL, 0) in rm_link_from_cache()
3572 for (linkp = &(linkhead->link); *linkp != NULL; ) { in rm_link_from_cache()
3573 if ((strcmp((*linkp)->devlink, devlink) == 0)) { in rm_link_from_cache()
3575 *linkp = (*linkp)->next; in rm_link_from_cache()
3583 if (linkhead->nextlink == save) in rm_link_from_cache()
3584 linkhead->nextlink = *linkp; in rm_link_from_cache()
3585 free(save->devlink); in rm_link_from_cache()
3586 free(save->contents); in rm_link_from_cache()
3591 linkp = &((*linkp)->next); in rm_link_from_cache()
3611 nextlinkhead = linkhead->nexthead; in rm_all_links_from_cache()
3612 assert(linkhead->nextlink == NULL); in rm_all_links_from_cache()
3613 for (link = linkhead->link; link != NULL; link = nextlink) { in rm_all_links_from_cache()
3614 nextlink = link->next; in rm_all_links_from_cache()
3615 free(link->devlink); in rm_all_links_from_cache()
3616 free(link->contents); in rm_all_links_from_cache()
3619 regfree(&(linkhead->dir_re_compiled)); in rm_all_links_from_cache()
3620 free(linkhead->dir_re); in rm_all_links_from_cache()
3698 if (stat(instfilename, &sb) == -1 && errno == ENOENT) in do_inst_sync()
3703 if (inst_sync(filename, flags) == -1) in do_inst_sync()
3710 case EALREADY: /* no-op, path_to_inst already up to date */ in do_inst_sync()
3948 if (fcntl(dev_lock_fd, F_SETLK, &lock) == -1) { in enter_dev_lock()
3954 if (lseek(dev_lock_fd, 0, SEEK_SET) == (off_t)-1) { in enter_dev_lock()
3962 * close it first - the order of lock acquisition should in enter_dev_lock()
3972 if (fcntl(dev_lock_fd, F_SETLKW, &lock) == -1) { in enter_dev_lock()
3990 if (lseek(dev_lock_fd, 0, SEEK_SET) == (off_t)-1) { in enter_dev_lock()
4007 * Drop the advisory /dev lock, close lock file. Close and re-open the
4028 if (fcntl(dev_lock_fd, F_SETLK, &unlock) == -1) { in exit_dev_lock()
4034 if (close(dev_lock_fd) == -1) { in exit_dev_lock()
4073 if (fcntl(daemon_lock_fd, F_SETLK, &lock) == -1) { in enter_daemon_lock()
4076 if (fcntl(daemon_lock_fd, F_GETLK, &lock) == -1) { in enter_daemon_lock()
4109 if (fcntl(daemon_lock_fd, F_SETLK, &lock) == -1) { in exit_daemon_lock()
4113 if (close(daemon_lock_fd) == -1) { in exit_daemon_lock()
4137 vprint(CHATTY_MID, "attempting %s-cleanup\n", in pre_and_post_cleanup()
4153 for (rm = remove_head; rm != NULL; rm = rm->next) { in pre_and_post_cleanup()
4154 if ((flags & rm->remove->flags) == flags) { in pre_and_post_cleanup()
4162 if (clean_ok(rm->remove) == DEVFSADM_SUCCESS) { in pre_and_post_cleanup()
4165 rm->remove->dev_dirs_re, &rd); in pre_and_post_cleanup()
4179 * ---------------------- ------ ----- --------- ----------
4181 * <neither -c nor -C> - - pre-clean post-clean
4183 * -C pre-clean post-clean pre-clean post-clean
4185 * -C -c class pre-clean post-clean pre-clean post-clean
4189 * -c class - - pre-clean post-clean
4200 /* no cleanup at all when using -i option */ in clean_ok()
4207 * cleanup flag (-C) and disk drivers are usually never in clean_ok()
4215 if ((cleanup == FALSE) && ((remove->flags & RM_ALWAYS) == 0)) { in clean_ok()
4229 if (strcmp(remove->device_class, classes[i]) == 0) { in clean_ok()
4275 for (rm = remove_head; rm != NULL; rm = rm->next) { in hot_cleanup()
4276 if ((RM_HOT & rm->remove->flags) == RM_HOT) { in hot_cleanup()
4277 head = get_cached_links(rm->remove->dev_dirs_re); in hot_cleanup()
4278 assert(head->nextlink == NULL); in hot_cleanup()
4279 for (link = head->link; in hot_cleanup()
4280 link != NULL; link = head->nextlink) { in hot_cleanup()
4291 head->nextlink = link->next; in hot_cleanup()
4294 * if devlink is in no-further-process hash, in hot_cleanup()
4297 if (nfphash_lookup(link->devlink) != NULL) in hot_cleanup()
4301 skip = strcmp(link->contents, path); in hot_cleanup()
4303 skip = strncmp(link->contents, path, in hot_cleanup()
4306 (call_minor_init(rm->modptr) == in hot_cleanup()
4311 "%sremoving %s -> %s\n", fcn, in hot_cleanup()
4312 link->devlink, link->contents); in hot_cleanup()
4314 * Use a copy of the cached link name in hot_cleanup()
4319 "%s", link->devlink); in hot_cleanup()
4320 if (rm->remove->flags & RM_NOINTERPOSE) { in hot_cleanup()
4322 (rm->remove->callback_fcn)(rmlink); in hot_cleanup()
4325 (rm->remove->callback_fcn)(rmlink); in hot_cleanup()
4367 * components left in path_re (ie no more /), then call function rd->fcn.
4388 len = (slash - path_re); in recurse_dev_re()
4418 (*(rd->fcn))(new_path, rd->data); in recurse_dev_re()
4445 * If the link is in the no-further-process hash in matching_dev()
4456 if (call_minor_init(cleanup_data->rm->modptr) == in matching_dev()
4464 if (cleanup_data->rm->remove->flags & RM_NOINTERPOSE) in matching_dev()
4466 (cleanup_data->rm->remove->callback_fcn)(devpath); in matching_dev()
4469 (cleanup_data->rm->remove->callback_fcn)(devpath); in matching_dev()
4545 (void) sscanf(contents, "%*[a-z]%d", &instance); in devfsadm_link_valid()
4590 vprint(REMOVE_MID, "%s %s -> %s\n", fcn, devpath, contents); in resolve_link()
4618 vprint(REMOVE_MID, "%s%s -> %s invalid link. " in resolve_link()
4642 rv = (stat(ptr - strlen(DEVICES), &sb) == -1); in resolve_link()
4667 match = (dep->flags & MATCH_MASK); in alloc_cmp_str()
4677 if (dep->sel_fcn == NULL) { in alloc_cmp_str()
4682 cmp_str = dep->sel_fcn(path, dep->cb_arg); in alloc_cmp_str()
4704 if (get_component(mp + 1, dep->match_arg) == NULL) { in alloc_cmp_str()
4732 /* ap can be NULL - Leaf address may not exist or be empty string */ in alloc_cmp_str()
4755 if (get_component(ap + 1, dep->match_arg) == NULL) { in alloc_cmp_str()
4764 " path: %s\n", fcn, dep->flags, path); in alloc_cmp_str()
4805 comp--; in get_component()
4894 * Private to devfsadm - used by ports module (port_link.c)
4955 assert(nrules == set->re_count); in find_enum_id()
4974 vprint(ENUM_MID, "%s: 1 match w/ ID: %s\n", fcn, matchnp->id); in find_enum_id()
4975 assert(matchnp->flags == 0); in find_enum_id()
4976 *buf = s_strdup(matchnp->id); in find_enum_id()
4986 numeral->id = new_id(set->headnumeral, type, min); in find_enum_id()
4987 numeral->full_path = s_strdup(devfs_path); in find_enum_id()
4988 numeral->rule_index = index; in find_enum_id()
4989 numeral->cmp_str = cmp_str; in find_enum_id()
4991 numeral->flags = 0; in find_enum_id()
4993 fcn, numeral->id, numeral->flags); in find_enum_id()
4997 numeral->next = set->headnumeral; in find_enum_id()
4998 set->headnumeral = numeral; in find_enum_id()
5000 *buf = s_strdup(numeral->id); in find_enum_id()
5008 * -1 : on error.
5018 int matchcount = 0, rv = -1; in lookup_enum_cache()
5026 assert(index < set->re_count); in lookup_enum_cache()
5029 return (-1); in lookup_enum_cache()
5040 for (np = set->headnumeral; np != NULL; np = np->next) { in lookup_enum_cache()
5045 if (np->flags & NUMERAL_RESERVED) { in lookup_enum_cache()
5048 "skipping\n", np->id); in lookup_enum_cache()
5049 assert(np->flags == NUMERAL_RESERVED); in lookup_enum_cache()
5054 " numeral flags = %d\n", np->id, np->flags); in lookup_enum_cache()
5055 assert(np->flags == 0); in lookup_enum_cache()
5058 if (np->cmp_str == NULL) { in lookup_enum_cache()
5060 " cache. path: %s\n", fcn, np->full_path); in lookup_enum_cache()
5061 return (-1); in lookup_enum_cache()
5067 cp = alloc_cmp_str(np->full_path, in lookup_enum_cache()
5068 &rules[np->rule_index]); in lookup_enum_cache()
5070 return (-1); in lookup_enum_cache()
5074 rv = strcmp(cmp_str, np->cmp_str); in lookup_enum_cache()
5096 vprint(ENUM_MID, "%s: re_count = %d\n", fcn, setp->re_count); in dump_enum_cache()
5097 for (i = 0; i < setp->re_count; i++) { in dump_enum_cache()
5098 vprint(ENUM_MID, "%s: re[%d] = %s\n", fcn, i, setp->re[i]); in dump_enum_cache()
5101 for (np = setp->headnumeral; np != NULL; np = np->next) { in dump_enum_cache()
5102 vprint(ENUM_MID, "%s: id: %s\n", fcn, np->id); in dump_enum_cache()
5103 vprint(ENUM_MID, "%s: full_path: %s\n", fcn, np->full_path); in dump_enum_cache()
5104 vprint(ENUM_MID, "%s: rule_index: %d\n", fcn, np->rule_index); in dump_enum_cache()
5105 vprint(ENUM_MID, "%s: cmp_str: %s\n", fcn, np->cmp_str); in dump_enum_cache()
5106 vprint(ENUM_MID, "%s: flags: %d\n", fcn, np->flags); in dump_enum_cache()
5119 * path component of each rules[].re. For example, the RE: "rmt/([0-9]+)"
5125 * but not including the minor name in this example.)
5144 for (setp = head_numeral_set; setp != NULL; setp = setp->next) { in get_enum_cache()
5149 if (nrules != setp->re_count) { in get_enum_cache()
5154 if (strcmp(setp->re[i], rules[i].re) != 0) { in get_enum_cache()
5183 setp->re = s_malloc(sizeof (char *) * nrules); in get_enum_cache()
5185 setp->re[i] = s_strdup(rules[i].re); in get_enum_cache()
5187 setp->re_count = nrules; in get_enum_cache()
5188 setp->headnumeral = NULL; in get_enum_cache()
5191 setp->next = head_numeral_set; in get_enum_cache()
5198 for (entry = enumerate_reserved; entry; entry = entry->er_next) { in get_enum_cache()
5200 vprint(RSRV_MID, "parsing rstring: %s\n", entry->er_file); in get_enum_cache()
5203 path_left = s_strdup(setp->re[i]); in get_enum_cache()
5205 ret = enumerate_parse(entry->er_file, path_left, in get_enum_cache()
5215 "rule RE: %s\n", entry->er_file, path_left); in get_enum_cache()
5226 path_left = s_strdup(setp->re[i]); in get_enum_cache()
5259 if ((sb->st_mode & S_IFMT) == S_IFLNK) { in get_stat_info()
5267 if ((sb->st_mode & S_IFMT) == S_IFDIR) { in get_stat_info()
5329 for (np = numeral; np != NULL; np = np->next) { in new_id()
5330 assert(np->flags == 0 || in new_id()
5331 np->flags == NUMERAL_RESERVED); in new_id()
5332 letter[*np->id - 'a']++; in new_id()
5335 imin = *min - 'a'; in new_id()
5358 for (np = numeral; np != NULL; np = np->next) { in new_id()
5359 assert(np->flags == 0 || in new_id()
5360 np->flags == NUMERAL_RESERVED); in new_id()
5362 temp->integer = atoi(np->id); in new_id()
5363 temp->next = NULL; in new_id()
5366 for (ptr = head; ptr != NULL; ptr = ptr->next) { in new_id()
5367 if (temp->integer < ptr->integer) { in new_id()
5368 temp->next = ptr; in new_id()
5372 previous = &(ptr->next); in new_id()
5380 for (ptr = head; ptr != NULL; ptr = ptr->next) { in new_id()
5381 if (imin == ptr->integer) { in new_id()
5384 if (imin < ptr->integer) { in new_id()
5394 ptr = ptr->next; in new_id()
5585 * Returns true if file matches file_re. If subexp is non-zero, it means
5619 int size = pmatch[subexp].rm_eo - pmatch[subexp].rm_so; in match_path_component()
5647 for (np = setp->headnumeral; np != NULL; np = np->next) { in create_reserved_numeral()
5648 if (strcmp(numeral_id, np->id) == 0) { in create_reserved_numeral()
5649 vprint(RSRV_MID, "ID: %s, already reserved\n", np->id); in create_reserved_numeral()
5650 assert(np->flags == NUMERAL_RESERVED); in create_reserved_numeral()
5653 assert(np->flags == 0 || in create_reserved_numeral()
5654 np->flags == NUMERAL_RESERVED); in create_reserved_numeral()
5660 np->id = s_strdup(numeral_id); in create_reserved_numeral()
5661 np->full_path = NULL; in create_reserved_numeral()
5662 np->rule_index = 0; in create_reserved_numeral()
5663 np->cmp_str = NULL; in create_reserved_numeral()
5664 np->flags = NUMERAL_RESERVED; in create_reserved_numeral()
5665 np->next = setp->headnumeral; in create_reserved_numeral()
5666 setp->headnumeral = np; in create_reserved_numeral()
5668 vprint(RSRV_MID, "Reserved numeral ID: %s\n", np->id); in create_reserved_numeral()
5689 assert(index >= 0 && index < setp->re_count); in create_cached_numeral()
5690 assert(strcmp(rules[index].re, setp->re[index]) == 0); in create_cached_numeral()
5699 for (np = setp->headnumeral; np != NULL; np = np->next) { in create_cached_numeral()
5700 assert(np->flags == 0 || np->flags == NUMERAL_RESERVED); in create_cached_numeral()
5701 if (strcmp(numeral_id, np->id) == 0) { in create_cached_numeral()
5707 if (np->flags == NUMERAL_RESERVED) { in create_cached_numeral()
5709 " reserved: %s\n", np->id); in create_cached_numeral()
5712 " NOT reserved: %s\n", np->id); in create_cached_numeral()
5760 np->id = s_strdup(numeral_id); in create_cached_numeral()
5761 np->full_path = s_strdup(linkptr); in create_cached_numeral()
5762 np->rule_index = index; in create_cached_numeral()
5763 np->cmp_str = cmp_str; in create_cached_numeral()
5764 np->flags = 0; in create_cached_numeral()
5766 np->next = setp->headnumeral; in create_cached_numeral()
5767 setp->headnumeral = np; in create_cached_numeral()
5776 * the state of /dev. It forces future enumerate calls to re-build
5795 setp = setp->next; in invalidate_enumerate_cache()
5797 for (i = 0; i < savedsetp->re_count; i++) { in invalidate_enumerate_cache()
5798 free(savedsetp->re[i]); in invalidate_enumerate_cache()
5800 free(savedsetp->re); in invalidate_enumerate_cache()
5802 for (numset = savedsetp->headnumeral; numset != NULL; ) { in invalidate_enumerate_cache()
5804 numset = numset->next; in invalidate_enumerate_cache()
5805 assert(savednumset->rule_index < savedsetp->re_count); in invalidate_enumerate_cache()
5806 free(savednumset->id); in invalidate_enumerate_cache()
5807 free(savednumset->full_path); in invalidate_enumerate_cache()
5808 free(savednumset->cmp_str); in invalidate_enumerate_cache()
5873 if (((stat->st_mode & S_IFMT) == S_IFBLK) || in devfsadm_copy_file()
5874 ((stat->st_mode & S_IFMT) == S_IFCHR)) { in devfsadm_copy_file()
5875 if (translate_major(stat->st_rdev, &newdev) == in devfsadm_copy_file()
5879 if (mknod(newfile, stat->st_mode, newdev) == -1) { in devfsadm_copy_file()
5883 } else if ((stat->st_mode & S_IFMT) == S_IFDIR) { in devfsadm_copy_file()
5884 if (mknod(newfile, stat->st_mode, 0) == -1) { in devfsadm_copy_file()
5888 } else if ((stat->st_mode & S_IFMT) == S_IFLNK) { in devfsadm_copy_file()
5894 if ((bytes = readlink(file, linkcontents, PATH_MAX)) == -1) { in devfsadm_copy_file()
5899 if (symlink(linkcontents, newfile) == -1) { in devfsadm_copy_file()
5906 (void) lchown(newfile, stat->st_uid, stat->st_gid); in devfsadm_copy_file()
5932 /* non-clone case */ in translate_major()
5987 for (ptr = n2m_list; ptr != NULL; ptr = ptr->next) { in get_major_no()
5988 if (strcmp(ptr->driver, driver) == 0) { in get_major_no()
5989 *major = ptr->major; in get_major_no()
5999 * private -R option to devfsadm, to translate major numbers from the
6025 /* sanity-check */ in load_n2m_table()
6031 ptr->major = major; in load_n2m_table()
6032 ptr->driver = s_strdup(driver); in load_n2m_table()
6033 ptr->next = n2m_list; in load_n2m_table()
6059 if (stat(enumerate_file, ¤t_sb) == -1) { in read_enumerate_file()
6068 enumerate_reserved = entry->er_next; in read_enumerate_file()
6069 free(entry->er_file); in read_enumerate_file()
6070 free(entry->er_id); in read_enumerate_file()
6090 enumerate_reserved = entry->er_next; in read_enumerate_file()
6091 free(entry->er_file); in read_enumerate_file()
6092 free(entry->er_id); in read_enumerate_file()
6140 entry->er_file = s_strdup(ncp); in read_enumerate_file()
6141 entry->er_id = NULL; in read_enumerate_file()
6142 entry->er_next = enumerate_reserved; in read_enumerate_file()
6190 free_link_list(devlinktab_list->p_link); in read_devlinktab_file()
6191 free_link_list(devlinktab_list->s_link); in read_devlinktab_file()
6192 free_selector_list(devlinktab_list->selector); in read_devlinktab_file()
6193 free(devlinktab_list->selector_pattern); in read_devlinktab_file()
6194 free(devlinktab_list->p_link_pattern); in read_devlinktab_file()
6195 if (devlinktab_list->s_link_pattern != NULL) { in read_devlinktab_file()
6196 free(devlinktab_list->s_link_pattern); in read_devlinktab_file()
6199 devlinktab_list = devlinktab_list->next; in read_devlinktab_file()
6218 if (line[i-1] == NEWLINE) { in read_devlinktab_file()
6219 line[i-1] = '\0'; in read_devlinktab_file()
6220 } else if (i == sizeof (line-1)) { in read_devlinktab_file()
6222 devlinktab_file, sizeof (line)-1); in read_devlinktab_file()
6252 entryp->line_number = devlinktab_line; in read_devlinktab_file()
6254 if ((entryp->selector = create_selector_list(selector)) in read_devlinktab_file()
6259 entryp->selector_pattern = s_strdup(selector); in read_devlinktab_file()
6261 if ((entryp->p_link = create_link_list(p_link)) == NULL) { in read_devlinktab_file()
6262 free_selector_list(entryp->selector); in read_devlinktab_file()
6263 free(entryp->selector_pattern); in read_devlinktab_file()
6268 entryp->p_link_pattern = s_strdup(p_link); in read_devlinktab_file()
6271 if ((entryp->s_link = in read_devlinktab_file()
6273 free_selector_list(entryp->selector); in read_devlinktab_file()
6274 free_link_list(entryp->p_link); in read_devlinktab_file()
6275 free(entryp->selector_pattern); in read_devlinktab_file()
6276 free(entryp->p_link_pattern); in read_devlinktab_file()
6280 entryp->s_link_pattern = s_strdup(s_link); in read_devlinktab_file()
6282 entryp->s_link = NULL; in read_devlinktab_file()
6283 entryp->s_link_pattern = NULL; in read_devlinktab_file()
6289 entryp->next = NULL; in read_devlinktab_file()
6291 previous = &(entryp->next); in read_devlinktab_file()
6364 selector_list->key = NAME; in create_selector_list()
6366 selector_list->key = TYPE; in create_selector_list()
6368 selector_list->key = ADDR; in create_selector_list()
6370 selector_list->arg = 0; in create_selector_list()
6372 selector_list->arg = in create_selector_list()
6382 selector_list->key = MINOR; in create_selector_list()
6384 selector_list->arg = 0; in create_selector_list()
6386 selector_list->arg = in create_selector_list()
6403 selector_list->val = s_strdup(val); in create_selector_list()
6404 selector_list->next = head_selector_list; in create_selector_list()
6407 key, val, selector_list->arg); in create_selector_list()
6422 * into a keyword-value pair. semicolon and equal characters are
6424 * terminating NULL character terminating the keyword-value pair, and the
6478 link_list->next = NULL; in create_link_list()
6481 /* a non-escaped string */ in create_link_list()
6486 link_list->type = CONSTANT; in create_link_list()
6487 link_list->constant = s_strdup(constant); in create_link_list()
6493 link_list->type = MINOR; in create_link_list()
6496 link_list->type = ADDR; in create_link_list()
6506 link_list->type = COUNTER; in create_link_list()
6510 link_list->type = NAME; in create_link_list()
6525 link_list->arg = in create_link_list()
6527 vprint(DEVLINK_MID, "link_list->arg = " in create_link_list()
6528 "%d\n", link_list->arg); in create_link_list()
6534 for (ptr = &head; *ptr != NULL; ptr = &((*ptr)->next)) in create_link_list()
6577 /* don't process devlink.tab if devfsadm invoked with -c <class> */ in process_devlink_compat()
6582 for (entry = devlinktab_list; entry != NULL; entry = entry->next) { in process_devlink_compat()
6599 selector_list_t *selector = entry->selector; in devlink_matches()
6604 for (; selector != NULL; selector = selector->next) { in devlink_matches()
6605 switch (selector->key) { in devlink_matches()
6606 case NAME: in devlink_matches()
6607 if (strcmp(di_node_name(node), selector->val) != 0) { in devlink_matches()
6614 if (strcmp(node_type, selector->val) != 0) { in devlink_matches()
6622 if (selector->arg == 0) { in devlink_matches()
6623 if (strcmp(addr, selector->val) != 0) { in devlink_matches()
6627 if (compare_field(addr, selector->val, in devlink_matches()
6628 selector->arg) == DEVFSADM_FAILURE) { in devlink_matches()
6637 if (selector->arg == 0) { in devlink_matches()
6638 if (strcmp(minor_name, selector->val) != 0) { in devlink_matches()
6642 if (compare_field(minor_name, selector->val, in devlink_matches()
6643 selector->arg) == DEVFSADM_FAILURE) { in devlink_matches()
6680 if (construct_devlink(primary_link, entry->p_link, contents, in build_links()
6681 minor, node, entry->p_link_pattern) == DEVFSADM_FAILURE) { in build_links()
6686 if (entry->s_link == NULL) { in build_links()
6690 if (construct_devlink(secondary_link, entry->s_link, primary_link, in build_links()
6691 minor, node, entry->s_link_pattern) == DEVFSADM_FAILURE) { in build_links()
6708 * false matches. For example, without anchors, "a/([0-9]+)" will match "ab/c9"
6745 int counter_offset = -1; in construct_devlink()
6755 for (; link_build != NULL; link_build = link_build->next) { in construct_devlink()
6756 switch (link_build->type) { in construct_devlink()
6757 case NAME: in construct_devlink()
6761 (void) strcat(link, link_build->constant); in construct_devlink()
6765 link_build->arg) == DEVFSADM_FAILURE) { in construct_devlink()
6775 link_build->arg) == DEVFSADM_FAILURE) { in construct_devlink()
6785 (void) strcat(link, "([0-9]+)"); in construct_devlink()
6786 (void) sprintf(start, "%d", link_build->arg); in construct_devlink()
6793 if (counter_offset != -1) { in construct_devlink()
6795 * copy anything appended after "([0-9]+)" into in construct_devlink()
6800 &link[counter_offset + strlen("([0-9]+)")]); in construct_devlink()
6828 --field; in compare_field()
6831 field--; in compare_field()
6857 * strcat() field # "field" of comma separated list "name" to "link".
6858 * Field 0 is the entire name.
6862 component_cat(char *link, char *name, int field) in component_cat() argument
6865 if (name == NULL) { in component_cat()
6870 (void) strcat(link, name); in component_cat()
6878 --field; in component_cat()
6879 while ((*name != '\0') && (field != 0)) { in component_cat()
6880 if (*(name++) == ',') { in component_cat()
6881 --field; in component_cat()
6889 while ((*name != '\0') && (*name != ',')) { in component_cat()
6890 *(link++) = *(name++); in component_cat()
6904 head = head->next; in free_selector_list()
6905 free(temp->val); in free_selector_list()
6917 head = head->next; in free_link_list()
6918 if (temp->type == CONSTANT) { in free_link_list()
6919 free(temp->constant); in free_link_list()
6930 * meanings. Modules should prefix the level with their
6931 * module name to prevent collisions.
6978 if (message[strlen(message) - 1] == '\n') { in devfsadm_print()
7007 * return noupdate state (-s)
7016 * return current root update path (-r)
7060 if (cb_arg.rv == -1 || cb_arg.count <= 0) in devfsadm_lookup_dev_names()
7129 if (src[0] == '\"' && src[len - 1] == '\"') { in dequote()
7130 len -= 2; in dequote()
7166 * Get the driver name based on the major number since the name in getattr()
7179 node_name = strrchr(devname, '/'); /* node name is the last */ in getattr()
7194 minor_name = strchr(minor_name, ':'); /* look for minor name */ in getattr()
7203 * mp->mp_drvname = device name from minor_perm in getattr()
7204 * mp->mp_minorname = minor part of device name from in getattr()
7206 * drvname = name of driver for this device in getattr()
7210 for (mp = minor_perms; mp != NULL; mp = mp->mp_next) { in getattr()
7212 (strcmp(mp->mp_drvname, node_name) == 0 ? TRUE : FALSE); in getattr()
7214 (strcmp(mp->mp_drvname, minor_name) == 0 ? TRUE:FALSE); in getattr()
7216 (strcmp(mp->mp_drvname, "clone") == 0 ? TRUE : FALSE); in getattr()
7218 (strcmp(mp->mp_drvname, driver) == 0 ? TRUE : FALSE); in getattr()
7225 * 1. mp->mp_drvname matches driver. in getattr()
7229 * 2. mp->mp_drvname matches node_name and this in getattr()
7230 * name is an alias of the driver name in getattr()
7247 * device name from the minor_perm in getattr()
7251 * Under real devfs, clone minor name is changed in getattr()
7252 * to match the driver name, but minor_perm may in getattr()
7258 if (gmatch(minor_name, mp->mp_minorname) != 0) { in getattr()
7259 *uid = mp->mp_uid; in getattr()
7260 *gid = mp->mp_gid; in getattr()
7261 *mode = spectype | mp->mp_mode; in getattr()
7358 for (l = p = dev, i = 0; (*p != '\0') && (i < (PATH_MAX - 1)); in convert_to_re()
7373 vprint(FILES_MID, "converted %s -> %s\n", dev, p); in convert_to_re()
7406 login_dev_cache = ldev->ldev_next; in read_logindevperm_file()
7407 free(ldev->ldev_console); in read_logindevperm_file()
7408 free(ldev->ldev_device); in read_logindevperm_file()
7409 regfree(&ldev->ldev_device_regex); in read_logindevperm_file()
7410 list = ldev->ldev_driver_list; in read_logindevperm_file()
7412 next = list->next; in read_logindevperm_file()
7475 ldev->ldev_console = s_strdup(console); in read_logindevperm_file()
7476 ldev->ldev_perms = perm; in read_logindevperm_file()
7479 * the logical device name may contain '*' which in read_logindevperm_file()
7482 ldev->ldev_device = convert_to_re(dev); in read_logindevperm_file()
7483 if (ldev->ldev_device && in read_logindevperm_file()
7484 (rv = regcomp(&ldev->ldev_device_regex, in read_logindevperm_file()
7485 ldev->ldev_device, REG_EXTENDED))) { in read_logindevperm_file()
7486 bzero(&ldev->ldev_device_regex, in read_logindevperm_file()
7487 sizeof (ldev->ldev_device_regex)); in read_logindevperm_file()
7489 ldev->ldev_device, rv); in read_logindevperm_file()
7491 ldev->ldev_next = login_dev_cache; in read_logindevperm_file()
7513 (void) strlcpy(list->driver_name, drv, in read_logindevperm_file()
7514 sizeof (list->driver_name)); in read_logindevperm_file()
7515 list->next = ldev->ldev_driver_list; in read_logindevperm_file()
7516 ldev->ldev_driver_list = list; in read_logindevperm_file()
7571 if (cp - tokenp - 1 == 0) { in getnexttoken()
7610 free(driver_aliases->alias_name); in read_driver_aliases_file()
7611 free(driver_aliases->driver_name); in read_driver_aliases_file()
7613 driver_aliases = driver_aliases->next; in read_driver_aliases_file()
7649 ap->driver_name = s_strdup(p); in read_driver_aliases_file()
7652 free(ap->driver_name); in read_driver_aliases_file()
7657 if (p[strlen(p) - 1] == '"') { in read_driver_aliases_file()
7658 p[strlen(p) - 1] = '\0'; in read_driver_aliases_file()
7662 ap->alias_name = s_strdup(p); in read_driver_aliases_file()
7667 lst_tail->next = ap; in read_driver_aliases_file()
7688 for (alias = driver_aliases; alias != NULL; alias = alias->next) { in alias()
7689 if ((strcmp(alias->driver_name, driver_name) == 0) && in alias()
7690 (strcmp(alias->alias_name, alias_name) == 0)) { in alias()
7705 if ((rv = stat(path, sbufp)) == -1) { in s_stat()
7784 if (mkdirp(path, mode) == -1) { in s_mkdirp()
7795 if (unlink(file) == -1) { in s_unlink()
7809 verbose[num_verbose - 1] = mid; in add_verbose_id()
7831 *mn_root = ptr += strlen(device_prefix) - 1; in is_minor_node()
7841 *mn_root = contents + strlen(device_prefix) - 1; in is_minor_node()
7856 * -1 an error occurred
7862 char *name; in add_property() local
7873 if ((name = di_prop_name(prop)) == NULL) in add_property()
7874 return (-1); in add_property()
7876 len = sizeof (DEV_PROP_PREFIX) + strlen(name); in add_property()
7878 return (-1); in add_property()
7881 (void) strlcat(attr_name, name, len); in add_property()
7960 return (-1); in add_property()
7968 for (i = 0; i < x->count; i++) { in free_dev_names()
7969 free(x->dev_names[i]); in free_dev_names()
7970 free(x->link_contents[i]); in free_dev_names()
7984 (x->dev_names[x->count] = s_strdup(path)) == NULL) in devlink_cb()
7987 if ((x->link_contents[x->count] = s_strdup(content)) == NULL) { in devlink_cb()
7988 free(x->dev_names[x->count]); in devlink_cb()
7992 x->count++; in devlink_cb()
7993 if (x->count >= MAX_DEV_NAME_COUNT) in devlink_cb()
7999 x->rv = -1; in devlink_cb()
8005 * Lookup dev name corresponding to the phys_path.
8008 * 0 with *dev_name set to the dev name
8011 * Lookup encountered no errors but dev name not found
8012 * -1
8027 if (cb_arg.rv == -1) in lookup_dev_name()
8028 return (-1); in lookup_dev_name()
8034 return (-1); in lookup_dev_name()
8057 if (cb_arg.rv == -1 || cb_arg.count == 0) in lookup_disk_dev_name()
8060 /* first try lookup based on /dev/rdsk name */ in lookup_disk_dev_name()
8063 sizeof (DEV_RDSK) - 1) == 0) { in lookup_disk_dev_name()
8070 /* now try lookup based on a minor name ending with ",raw" */ in lookup_disk_dev_name()
8071 len1 = sizeof (DISK_RAW_MINOR) - 1; in lookup_disk_dev_name()
8075 strcmp(cb_arg.link_contents[i] + len2 - len1, in lookup_disk_dev_name()
8092 /* if the name contains slice or partition number strip it */ in lookup_disk_dev_name()
8093 p = dev_name + strlen(dev_name) - 1; in lookup_disk_dev_name()
8096 p--; in lookup_disk_dev_name()
8117 if (cb_arg.rv == -1 || cb_arg.count == 0) in lookup_lofi_dev_name()
8120 /* lookup based on a minor name ending with ",raw" */ in lookup_lofi_dev_name()
8125 strcmp(cb_arg.link_contents[i] + len2 - len1, in lookup_lofi_dev_name()
8150 if (lookup_dev_name(node_path, &dev_name) == -1) in lookup_network_dev_name()
8154 /* dlpi style-2 only interface */ in lookup_network_dev_name()
8157 if (lookup_dev_name(phys_path, &dev_name) == -1 || in lookup_network_dev_name()
8179 if (cb_arg.rv == -1 || cb_arg.count == 0) in lookup_printer_dev_name()
8182 /* first try lookup based on /dev/printers name */ in lookup_printer_dev_name()
8185 sizeof (DEV_PRINTERS) - 1) == 0) { in lookup_printer_dev_name()
8191 /* fallback to the first name */ in lookup_printer_dev_name()
8232 if (driver_name == NULL || instance == -1) in build_event_attributes()
8248 * To prevent name lookup error messages for this case, we in build_event_attributes()
8330 else if (x == -1) { in build_event_attributes()
8386 tmp->class = s_strdup(class); in enqueue_sysevent()
8387 tmp->subclass = s_strdup(subclass); in enqueue_sysevent()
8388 tmp->nvl = nvl; in enqueue_sysevent()
8392 syseventq_front->next = tmp; in enqueue_sysevent()
8407 tmp->class, tmp->subclass); in process_syseventq()
8409 log_event(tmp->class, tmp->subclass, tmp->nvl); in process_syseventq()
8411 if (tmp->class != NULL) in process_syseventq()
8412 free(tmp->class); in process_syseventq()
8413 if (tmp->subclass != NULL) in process_syseventq()
8414 free(tmp->subclass); in process_syseventq()
8415 nvlist_free(tmp->nvl); in process_syseventq()
8416 syseventq_back = syseventq_back->next; in process_syseventq()
8438 NULL, -1, minor); in build_and_enq_event()
8449 * Note. the argument (line) must be null-terminated.
8461 * Functions to deal with the no-further-processing hash
8494 for (ip = nfp_hash[index]; ip; ip = ip->i_next) { in nfphash_lookup()
8495 if (strcmp(ip->i_key, key) == 0) in nfphash_lookup()
8513 ip->i_key = s_strdup(key); in nfphash_insert()
8515 ip->i_next = nfp_hash[index]; in nfphash_insert()
8528 nfp_hash[i] = ip->i_next; in nfphash_destroy()
8529 free(ip->i_key); in nfphash_destroy()
8548 "MODDEVNAME_LOOKUPDOOR) failed - %s\n", in devname_kcall()
8585 cmd = args->devfsadm_cmd; in devname_lookup_handler()
8601 update_drvconf((major_t)-1, 0); in devname_lookup_handler()
8673 for (; entry; entry = entry->er_next) { in devfsadm_reserve_id_cache()
8674 if (entry->er_id) { in devfsadm_reserve_id_cache()
8676 entry->er_file, entry->er_id); in devfsadm_reserve_id_cache()
8682 if (regexec(&re_array[i].d_rcomp, entry->er_file, in devfsadm_reserve_id_cache()
8687 size = pmch[subex].rm_eo - pmch[subex].rm_so; in devfsadm_reserve_id_cache()
8688 entry->er_id = s_malloc(size + 1); in devfsadm_reserve_id_cache()
8689 (void) strncpy(entry->er_id, in devfsadm_reserve_id_cache()
8690 &entry->er_file[pmch[subex].rm_so], size); in devfsadm_reserve_id_cache()
8691 entry->er_id[size] = '\0'; in devfsadm_reserve_id_cache()
8694 "ID is %s\n", entry->er_file, in devfsadm_reserve_id_cache()
8695 re_array[i].d_re, entry->er_id); in devfsadm_reserve_id_cache()
8698 "RE(%s) ID is %s\n", entry->er_file, in devfsadm_reserve_id_cache()
8699 re_array[i].d_re, entry->er_id); in devfsadm_reserve_id_cache()
8712 for (; entry; entry = entry->er_next) { in devfsadm_reserve_id_cache()
8713 if (entry->er_id == NULL) in devfsadm_reserve_id_cache()
8716 vprint(RSBY_MID, "devlink: %s\n", entry->er_file); in devfsadm_reserve_id_cache()
8717 vprint(RSBY_MID, "ID: %s\n", entry->er_id); in devfsadm_reserve_id_cache()
8720 entry->er_file); in devfsadm_reserve_id_cache()
8722 entry->er_id); in devfsadm_reserve_id_cache()
8729 for (i = i-1; i >= 0; i--) { in devfsadm_reserve_id_cache()
8774 for (; entry; entry = entry->er_next) { in devfsadm_is_reserved()
8775 if (entry->er_id == NULL) in devfsadm_is_reserved()
8777 if (strcmp(entry->er_id, estruct.er_id) != 0) in devfsadm_is_reserved()
8781 "match\n", entry->er_file, devlink); in devfsadm_is_reserved()