146d46cd4SYuri Pankov.\" 246d46cd4SYuri Pankov.\" The contents of this file are subject to the terms of the 346d46cd4SYuri Pankov.\" Common Development and Distribution License (the "License"). 446d46cd4SYuri Pankov.\" You may not use this file except in compliance with the License. 546d46cd4SYuri Pankov.\" 646d46cd4SYuri Pankov.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 746d46cd4SYuri Pankov.\" or http://www.opensolaris.org/os/licensing. 846d46cd4SYuri Pankov.\" See the License for the specific language governing permissions 946d46cd4SYuri Pankov.\" and limitations under the License. 1046d46cd4SYuri Pankov.\" 1146d46cd4SYuri Pankov.\" When distributing Covered Code, include this CDDL HEADER in each 1246d46cd4SYuri Pankov.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1346d46cd4SYuri Pankov.\" If applicable, add the following below this CDDL HEADER, with the 1446d46cd4SYuri Pankov.\" fields enclosed by brackets "[]" replaced with your own identifying 1546d46cd4SYuri Pankov.\" information: Portions Copyright [yyyy] [name of copyright owner] 16faf5add5SMarcel Telka.\" 17faf5add5SMarcel Telka.\" 18faf5add5SMarcel Telka.\" Copyright (c) 1999, Sun Microsystems, Inc. All Rights Reserved 1946d46cd4SYuri Pankov.\" Copyright 2017 Nexenta Systems, Inc. 20faf5add5SMarcel Telka.\" 2146d46cd4SYuri Pankov.Dd January 25, 2017 2246d46cd4SYuri Pankov.Dt DEVID_GET 3DEVID 2346d46cd4SYuri Pankov.Os 2446d46cd4SYuri Pankov.Sh NAME 2546d46cd4SYuri Pankov.Nm devid_get , 2646d46cd4SYuri Pankov.Nm devid_free , 2746d46cd4SYuri Pankov.Nm devid_get_minor_name , 2846d46cd4SYuri Pankov.Nm devid_deviceid_to_nmlist , 2946d46cd4SYuri Pankov.Nm devid_free_nmlist , 3046d46cd4SYuri Pankov.Nm devid_compare , 3146d46cd4SYuri Pankov.Nm devid_sizeof , 3246d46cd4SYuri Pankov.Nm devid_valid , 3346d46cd4SYuri Pankov.Nm devid_str_encode , 3446d46cd4SYuri Pankov.Nm devid_str_decode , 3546d46cd4SYuri Pankov.Nm devid_str_from_path , 3646d46cd4SYuri Pankov.Nm devid_str_free 3746d46cd4SYuri Pankov.Nd device ID interfaces for user applications 3846d46cd4SYuri Pankov.Sh SYNOPSIS 3946d46cd4SYuri Pankov.Lb libdevid 4046d46cd4SYuri Pankov.In devid.h 4146d46cd4SYuri Pankov.Ft int 4246d46cd4SYuri Pankov.Fo devid_get 4346d46cd4SYuri Pankov.Fa "int fd" 4446d46cd4SYuri Pankov.Fa "ddi_devid_t *retdevid" 4546d46cd4SYuri Pankov.Fc 4646d46cd4SYuri Pankov.Ft void 4746d46cd4SYuri Pankov.Fo devid_free 4846d46cd4SYuri Pankov.Fa "ddi_devid_t devid" 4946d46cd4SYuri Pankov.Fc 5046d46cd4SYuri Pankov.Ft int 5146d46cd4SYuri Pankov.Fo devid_get_minor_name 5246d46cd4SYuri Pankov.Fa "int fd" 5346d46cd4SYuri Pankov.Fa "char **retminor_name" 5446d46cd4SYuri Pankov.Fc 5546d46cd4SYuri Pankov.Ft int 5646d46cd4SYuri Pankov.Fo devid_deviceid_to_nmlist 5746d46cd4SYuri Pankov.Fa "char *search_path" 5846d46cd4SYuri Pankov.Fa "ddi_devid_t devid" 5946d46cd4SYuri Pankov.Fa "char *minor_name" 6046d46cd4SYuri Pankov.Fa "devid_nmlist_t **retlist" 6146d46cd4SYuri Pankov.Fc 6246d46cd4SYuri Pankov.Ft void 6346d46cd4SYuri Pankov.Fo devid_free_nmlist 6446d46cd4SYuri Pankov.Fa "devid_nmlist_t *list" 6546d46cd4SYuri Pankov.Fc 6646d46cd4SYuri Pankov.Ft int 6746d46cd4SYuri Pankov.Fo devid_compare 6846d46cd4SYuri Pankov.Fa "ddi_devid_t devid1" 6946d46cd4SYuri Pankov.Fa "ddi_devid_t devid2" 7046d46cd4SYuri Pankov.Fc 7146d46cd4SYuri Pankov.Ft size_t 7246d46cd4SYuri Pankov.Fo devid_sizeof 7346d46cd4SYuri Pankov.Fa "ddi_devid_t devid" 7446d46cd4SYuri Pankov.Fc 7546d46cd4SYuri Pankov.Ft int 7646d46cd4SYuri Pankov.Fo devid_valid 7746d46cd4SYuri Pankov.Fa "ddi_devid_t devid" 7846d46cd4SYuri Pankov.Fc 7946d46cd4SYuri Pankov.Ft char * 8046d46cd4SYuri Pankov.Fo devid_str_encode 8146d46cd4SYuri Pankov.Fa "ddi_devid_t devid" 8246d46cd4SYuri Pankov.Fa "char *minor_name" 8346d46cd4SYuri Pankov.Fc 8446d46cd4SYuri Pankov.Ft int 8546d46cd4SYuri Pankov.Fo devid_str_decode 8646d46cd4SYuri Pankov.Fa "char *devidstr" 8746d46cd4SYuri Pankov.Fa "ddi_devid_t *retdevid" 8846d46cd4SYuri Pankov.Fa "char **retminor_name" 8946d46cd4SYuri Pankov.Fc 9046d46cd4SYuri Pankov.Ft char * 9146d46cd4SYuri Pankov.Fo devid_str_from_path 9246d46cd4SYuri Pankov.Fa "const char *path" 9346d46cd4SYuri Pankov.Fc 9446d46cd4SYuri Pankov.Ft void 9546d46cd4SYuri Pankov.Fo devid_str_free 9646d46cd4SYuri Pankov.Fa "char *str" 9746d46cd4SYuri Pankov.Fc 9846d46cd4SYuri Pankov.Sh DESCRIPTION 9946d46cd4SYuri PankovThese functions provide unique identifiers 10046d46cd4SYuri Pankov.Pq device ID 10146d46cd4SYuri Pankovfor devices. 102c10c16deSRichard LoweApplications and device drivers use these functions to identify and locate 103c10c16deSRichard Lowedevices, independent of the device's physical connection or its logical device 104c10c16deSRichard Lowename or number. 10546d46cd4SYuri Pankov.Pp 10646d46cd4SYuri PankovThe 10746d46cd4SYuri Pankov.Fn devid_get 10846d46cd4SYuri Pankovfunction returns in 10946d46cd4SYuri Pankov.Fa retdevid 11046d46cd4SYuri Pankovthe device ID for the device associated with the open file descriptor 11146d46cd4SYuri Pankov.Fa fd , 11246d46cd4SYuri Pankovwhich refers to any device. 11346d46cd4SYuri PankovIt returns an error if the device does not have an associated device ID. 11446d46cd4SYuri PankovThe caller must free the memory allocated for 11546d46cd4SYuri Pankov.Fa retdevid 11646d46cd4SYuri Pankovusing the 11746d46cd4SYuri Pankov.Fn devid_free 11846d46cd4SYuri Pankovfunction. 11946d46cd4SYuri Pankov.Pp 12046d46cd4SYuri PankovThe 12146d46cd4SYuri Pankov.Fn devid_free 12246d46cd4SYuri Pankovfunction frees the space that was allocated for the returned 12346d46cd4SYuri Pankov.Fa devid 12446d46cd4SYuri Pankovby 12546d46cd4SYuri Pankov.Fn devid_get 12646d46cd4SYuri Pankovand 12746d46cd4SYuri Pankov.Fn devid_str_decode . 12846d46cd4SYuri Pankov.Pp 12946d46cd4SYuri PankovThe 13046d46cd4SYuri Pankov.Fn devid_get_minor_name 13146d46cd4SYuri Pankovfunction returns the minor name, in 13246d46cd4SYuri Pankov.Fa retminor_name , 13346d46cd4SYuri Pankovfor the device associated with the open file descriptor 13446d46cd4SYuri Pankov.Fa fd . 13546d46cd4SYuri PankovThis name is specific to the particular minor number, but is 13646d46cd4SYuri Pankov.Qq instance number 13746d46cd4SYuri Pankovspecific. 13846d46cd4SYuri PankovThe caller of this function must free the memory allocated for the returned 13946d46cd4SYuri Pankov.Fa retminor_name 14046d46cd4SYuri Pankovstring using 14146d46cd4SYuri Pankov.Fn devid_str_free . 14246d46cd4SYuri Pankov.Pp 14346d46cd4SYuri PankovThe 14446d46cd4SYuri Pankov.Fn devid_deviceid_to_nmlist 14546d46cd4SYuri Pankovfunction returns an array of 14646d46cd4SYuri Pankov.Fa devid_nmlist 14746d46cd4SYuri Pankovstructures, where each entry matches the 14846d46cd4SYuri Pankov.Fa devid 14946d46cd4SYuri Pankovand 15046d46cd4SYuri Pankov.Fa minor_name 15146d46cd4SYuri Pankovpassed in. 15246d46cd4SYuri PankovIf the 15346d46cd4SYuri Pankov.Fa minor_name 15446d46cd4SYuri Pankovspecified is one of the special values 15546d46cd4SYuri Pankov.Po 15646d46cd4SYuri Pankov.Dv DEVID_MINOR_NAME_ALL , 15746d46cd4SYuri Pankov.Dv DEVID_MINOR_NAME_ALL_CHR , 15846d46cd4SYuri Pankovor 15946d46cd4SYuri Pankov.Dv DEVID_MINOR_NAME_ALL_BLK 16046d46cd4SYuri Pankov.Pc , 16146d46cd4SYuri Pankovthen all minor names associated with 16246d46cd4SYuri Pankov.Fa devid 16346d46cd4SYuri Pankovwhich also meet the special 16446d46cd4SYuri Pankov.Fa minor_name 16546d46cd4SYuri Pankovfiltering requirements are returned. 16646d46cd4SYuri PankovThe 16746d46cd4SYuri Pankov.Fa devid_nmlist 16846d46cd4SYuri Pankovstructure contains the device name and device number. 16946d46cd4SYuri PankovThe last entry of the array contains a null pointer for the 17046d46cd4SYuri Pankov.Fa devname 17146d46cd4SYuri Pankovand 17246d46cd4SYuri Pankov.Dv NODEV 17346d46cd4SYuri Pankovfor the device number. 17446d46cd4SYuri PankovThis function traverses the file tree, starting at 17546d46cd4SYuri Pankov.Fa search_path . 17646d46cd4SYuri PankovFor each device with a matching device ID and minor name tuple, a device name 17746d46cd4SYuri Pankovand device number are added to the 17846d46cd4SYuri Pankov.Fa retlist . 17946d46cd4SYuri PankovIf no matches are found, an error is returned. 18046d46cd4SYuri PankovThe caller of this function must free the memory allocated for the returned 18146d46cd4SYuri Pankovarray with the 18246d46cd4SYuri Pankov.Fn devid_free_nmlist 18346d46cd4SYuri Pankovfunction. 18446d46cd4SYuri PankovThis function may take a long time to complete if called with the device ID of 18546d46cd4SYuri Pankovan unattached device. 18646d46cd4SYuri Pankov.Pp 18746d46cd4SYuri PankovThe 18846d46cd4SYuri Pankov.Fn devid_free_nmlist 18946d46cd4SYuri Pankovfunction frees the memory allocated by the 19046d46cd4SYuri Pankov.Fn devid_deviceid_to_nmlist 19146d46cd4SYuri Pankovfunction and returned in the 19246d46cd4SYuri Pankov.Fa retlist . 19346d46cd4SYuri Pankov.Pp 19446d46cd4SYuri PankovThe 19546d46cd4SYuri Pankov.Fn devid_compare 19646d46cd4SYuri Pankovfunction compares two device IDs and determines both equality and sort order. 19746d46cd4SYuri PankovThe function returns an integer greater than 0 if the device ID pointed to by 19846d46cd4SYuri Pankov.Fa devid1 19946d46cd4SYuri Pankovis greater than the device ID pointed to by 20046d46cd4SYuri Pankov.Fa devid2 . 20146d46cd4SYuri PankovIt returns 0 if the device ID pointed to by 20246d46cd4SYuri Pankov.Fa devid1 20346d46cd4SYuri Pankovis equal to the device ID pointed to by 20446d46cd4SYuri Pankov.Fa devid2 . 20546d46cd4SYuri PankovIt returns an integer less than 0 if the device ID pointed to by 20646d46cd4SYuri Pankov.Fa devid1 20746d46cd4SYuri Pankovis less than the device ID pointed to by 20846d46cd4SYuri Pankov.Fa devid2 . 20946d46cd4SYuri PankovThis function is the only valid mechanism to determine the equality of two 21046d46cd4SYuri Pankovdevids. 21146d46cd4SYuri PankovThis function may indicate equality for arguments which by simple inspection 21246d46cd4SYuri Pankovappear different. 21346d46cd4SYuri Pankov.Pp 21446d46cd4SYuri PankovThe 21546d46cd4SYuri Pankov.Fn devid_sizeof 21646d46cd4SYuri Pankovfunction returns the size of 21746d46cd4SYuri Pankov.Fa devid 21846d46cd4SYuri Pankovin bytes. 21946d46cd4SYuri Pankov.Pp 22046d46cd4SYuri PankovThe 22146d46cd4SYuri Pankov.Fn devid_valid 22246d46cd4SYuri Pankovfunction validates the format of a 22346d46cd4SYuri Pankov.Fa devid . 22446d46cd4SYuri PankovIt returns 1 if the format is valid, and 0 if invalid. 22546d46cd4SYuri PankovThis check may not be as complete as the corresponding kernel function 22646d46cd4SYuri Pankov.Fn ddi_devid_valid 22746d46cd4SYuri Pankov.Po see 22846d46cd4SYuri Pankov.Xr ddi_devid_compare 9F 22946d46cd4SYuri Pankov.Pc . 23046d46cd4SYuri Pankov.Pp 23146d46cd4SYuri PankovThe 23246d46cd4SYuri Pankov.Fn devid_str_encode 23346d46cd4SYuri Pankovfunction encodes a 23446d46cd4SYuri Pankov.Fa devid 23546d46cd4SYuri Pankovand 23646d46cd4SYuri Pankov.Fa minor_name 23746d46cd4SYuri Pankovinto a null-terminated ASCII string, returning a pointer to that string. 23846d46cd4SYuri PankovTo avoid shell conflicts, the 23946d46cd4SYuri Pankov.Fa devid 24046d46cd4SYuri Pankovportion of the string is limited to uppercase and lowercase letters, digits, and 24146d46cd4SYuri Pankovthe plus 24246d46cd4SYuri Pankov.Pq Qq Sy \&+ , 24346d46cd4SYuri Pankovminus 24446d46cd4SYuri Pankov.Pq Qq Sy \&- , 24546d46cd4SYuri Pankovperiod 24646d46cd4SYuri Pankov.Pq Qq Sy \&. , 24746d46cd4SYuri Pankovequals 24846d46cd4SYuri Pankov.Pq Qq Sy \&= , 24946d46cd4SYuri Pankovunderscore 25046d46cd4SYuri Pankov.Pq Qq Sy \&_ , 25146d46cd4SYuri Pankovtilde 25246d46cd4SYuri Pankov.Pq Qq Sy \&~ , 25346d46cd4SYuri Pankovand comma 25446d46cd4SYuri Pankov.Pq Qq Sy \&, 25546d46cd4SYuri Pankovcharacters. 25646d46cd4SYuri PankovIf there is an ASCII quote character in the binary form of a 25746d46cd4SYuri Pankov.Fa devid , 25846d46cd4SYuri Pankovthe string representation will be in hex_id form, not ascii_id form. 25946d46cd4SYuri PankovThe comma 26046d46cd4SYuri Pankov.Pq Qq Sy \&, 26146d46cd4SYuri Pankovcharacter is added for 26246d46cd4SYuri Pankov.Qq id1, 26346d46cd4SYuri Pankovat the head of the string 26446d46cd4SYuri Pankov.Fa devid . 26546d46cd4SYuri PankovIf both a 26646d46cd4SYuri Pankov.Fa devid 26746d46cd4SYuri Pankovand a 26846d46cd4SYuri Pankov.Fa minor_name 26946d46cd4SYuri Pankovare non-null, a slash 27046d46cd4SYuri Pankov.Pq Qq Sy \&/ 27146d46cd4SYuri Pankovis used to separate the 27246d46cd4SYuri Pankov.Fa devid 27346d46cd4SYuri Pankovfrom the 27446d46cd4SYuri Pankov.Fa minor_name 27546d46cd4SYuri Pankovin the encoded string. 27646d46cd4SYuri PankovIf 27746d46cd4SYuri Pankov.Fa minor_name 27846d46cd4SYuri Pankovis null, only the 27946d46cd4SYuri Pankov.Fa devid 28046d46cd4SYuri Pankovis encoded. 28146d46cd4SYuri PankovIf the 28246d46cd4SYuri Pankov.Fa devid 28346d46cd4SYuri Pankovis null then the special string 28446d46cd4SYuri Pankov.Qq id0 28546d46cd4SYuri Pankovis returned. 28646d46cd4SYuri PankovNote that you cannot compare the returned string against another string with 28746d46cd4SYuri Pankov.Xr strcmp 3C 28846d46cd4SYuri Pankovto determine devid equality. 28946d46cd4SYuri PankovThe string returned must be freed by calling 29046d46cd4SYuri Pankov.Fn devid_str_free . 29146d46cd4SYuri Pankov.Pp 29246d46cd4SYuri PankovThe 29346d46cd4SYuri Pankov.Fn devid_str_from_path 29446d46cd4SYuri Pankovis similar to 29546d46cd4SYuri Pankov.Fn devid_str_encode , 29646d46cd4SYuri Pankovbut takes a 29746d46cd4SYuri Pankov.Fa path 29846d46cd4SYuri Pankovargument instead. 29946d46cd4SYuri PankovIf 30046d46cd4SYuri Pankov.Fa path 30146d46cd4SYuri Pankovincludes the minor name, it will be encoded as well. 30246d46cd4SYuri PankovThe string returned must be freed by calling 30346d46cd4SYuri Pankov.Fn devid_str_free . 30446d46cd4SYuri Pankov.Pp 30546d46cd4SYuri PankovThe 30646d46cd4SYuri Pankov.Fn devid_str_decode 30746d46cd4SYuri Pankovfunction takes a string previously produced by the 30846d46cd4SYuri Pankov.Fn devid_str_encode 30946d46cd4SYuri Pankovor 31046d46cd4SYuri Pankov.Fn ddi_devid_str_encode 31146d46cd4SYuri Pankov.Po see 31246d46cd4SYuri Pankov.Xr ddi_devid_compare 9F 31346d46cd4SYuri Pankov.Pc 31446d46cd4SYuri Pankovfunction and decodes the contained device ID and minor name, allocating and 31546d46cd4SYuri Pankovreturning pointers to the extracted parts via the 31646d46cd4SYuri Pankov.Fa retdevid 31746d46cd4SYuri Pankovand 31846d46cd4SYuri Pankov.Fa retminor_name 31946d46cd4SYuri Pankovarguments. 32046d46cd4SYuri PankovIf the special 32146d46cd4SYuri Pankov.Fa devidstr 32246d46cd4SYuri Pankov.Qq id0 32346d46cd4SYuri Pankovwas specified, the returned device ID and minor name will both be null. 32446d46cd4SYuri PankovA non-null returned devid must be freed by the caller by the 32546d46cd4SYuri Pankov.Fn devid_free 32646d46cd4SYuri Pankovfunction. 32746d46cd4SYuri PankovA non-null returned minor name must be freed by calling 32846d46cd4SYuri Pankov.Fn devid_str_free . 32946d46cd4SYuri Pankov.Pp 33046d46cd4SYuri PankovThe 33146d46cd4SYuri Pankov.Fn devid_str_free 33246d46cd4SYuri Pankovfunction frees the character string returned by 33346d46cd4SYuri Pankov.Fn devid_str_encode 33446d46cd4SYuri Pankovand the 33546d46cd4SYuri Pankov.Fa retminor_name 33646d46cd4SYuri Pankovargument returned by 33746d46cd4SYuri Pankov.Fn devid_str_decode 33846d46cd4SYuri Pankovand 33946d46cd4SYuri Pankov.Fn devid_get_minor_name . 34046d46cd4SYuri Pankov.Sh RETURN VALUES 34146d46cd4SYuri PankovUpon successful completion, the 34246d46cd4SYuri Pankov.Fn devid_get , 34346d46cd4SYuri Pankov.Fn devid_get_minor_name , 34446d46cd4SYuri Pankov.Fn devid_str_decode , 34546d46cd4SYuri Pankovand 34646d46cd4SYuri Pankov.Fn devid_deviceid_to_nmlist 34746d46cd4SYuri Pankovfunctions return 0. 34846d46cd4SYuri PankovOtherwise, they return -1. 34946d46cd4SYuri Pankov.Pp 35046d46cd4SYuri PankovThe 35146d46cd4SYuri Pankov.Fn devid_compare 35246d46cd4SYuri Pankovfunction returns the following values: 35346d46cd4SYuri Pankov.Bl -tag -width Ds 35446d46cd4SYuri Pankov.It Sy -1 35546d46cd4SYuri PankovThe device ID pointed to by 35646d46cd4SYuri Pankov.Fa devid1 35746d46cd4SYuri Pankovis less than the device ID pointed to by 35846d46cd4SYuri Pankov.Fa devid2 . 35946d46cd4SYuri Pankov.It Sy 0 36046d46cd4SYuri PankovThe device ID pointed to by 36146d46cd4SYuri Pankov.Fa devid1 36246d46cd4SYuri Pankovis equal to the device ID pointed to by 36346d46cd4SYuri Pankov.Fa devid2 . 36446d46cd4SYuri Pankov.It Sy 1 36546d46cd4SYuri PankovThe device ID pointed to by 36646d46cd4SYuri Pankov.Fa devid1 36746d46cd4SYuri Pankovis greater than the device ID pointed to by 36846d46cd4SYuri Pankov.Fa devid2 . 36946d46cd4SYuri Pankov.El 37046d46cd4SYuri Pankov.Pp 37146d46cd4SYuri PankovThe 37246d46cd4SYuri Pankov.Fn devid_sizeof 37346d46cd4SYuri Pankovfunction returns the size of 37446d46cd4SYuri Pankov.Fa devid 37546d46cd4SYuri Pankovin bytes. 37646d46cd4SYuri PankovIf 37746d46cd4SYuri Pankov.Fa devid 37846d46cd4SYuri Pankovis null, the number of bytes that must be allocated and initialized to determine 37946d46cd4SYuri Pankovthe size of a complete device ID is returned. 38046d46cd4SYuri Pankov.Pp 38146d46cd4SYuri PankovThe 38246d46cd4SYuri Pankov.Fn devid_valid 38346d46cd4SYuri Pankovfunction returns 1 if the 38446d46cd4SYuri Pankov.Fa devid 38546d46cd4SYuri Pankovis valid and 0 if the 38646d46cd4SYuri Pankov.Fa devid 38746d46cd4SYuri Pankovis invalid. 38846d46cd4SYuri Pankov.Pp 38946d46cd4SYuri PankovThe 39046d46cd4SYuri Pankov.Fn devid_str_encode 39146d46cd4SYuri Pankovand 39246d46cd4SYuri Pankov.Fn devid_str_from_path 39346d46cd4SYuri Pankovfunctions return NULL to indicate failure. 39446d46cd4SYuri PankovFailure may be caused by attempting to encode an invalid string. 39546d46cd4SYuri PankovIf the return value is non-null, the caller must free the returned string by 39646d46cd4SYuri Pankovusing the 39746d46cd4SYuri Pankov.Fn devid_str_free 39846d46cd4SYuri Pankovfunction. 39946d46cd4SYuri Pankov.Sh EXAMPLES 40046d46cd4SYuri Pankov.Bl -tag -width Ds 40146d46cd4SYuri Pankov.It Xo 40246d46cd4SYuri Pankov.Sy Example 1 40346d46cd4SYuri PankovUsing 40446d46cd4SYuri Pankov.Fn devid_get , 40546d46cd4SYuri Pankov.Fn devid_get_minor_name , 40646d46cd4SYuri Pankovand 40746d46cd4SYuri Pankov.Fn devid_str_encode 40846d46cd4SYuri Pankov.Xc 40946d46cd4SYuri PankovThe following example shows the proper use of 41046d46cd4SYuri Pankov.Fn devid_get , 41146d46cd4SYuri Pankov.Fn devid_get_minor_name , 41246d46cd4SYuri Pankovand 41346d46cd4SYuri Pankov.Fn devid_str_encode 41446d46cd4SYuri Pankovto free the space allocated for 41546d46cd4SYuri Pankov.Fa devid , 41646d46cd4SYuri Pankov.Fa minor_name 41746d46cd4SYuri Pankovand encoded 41846d46cd4SYuri Pankov.Fa devid . 41946d46cd4SYuri Pankov.Bd -literal 420c10c16deSRichard Loweint fd; 421c10c16deSRichard Loweddi_devid_t devid; 422c10c16deSRichard Lowechar *minor_name, *devidstr; 42346d46cd4SYuri Pankov 424c10c16deSRichard Loweif ((fd = open("/dev/dsk/c0t3d0s0", O_RDONLY|O_NDELAY)) < 0) { 425c10c16deSRichard Lowe ... 426c10c16deSRichard Lowe} 427c10c16deSRichard Loweif (devid_get(fd, &devid) != 0) { 428c10c16deSRichard Lowe ... 429c10c16deSRichard Lowe} 430c10c16deSRichard Loweif (devid_get_minor_name(fd, &minor_name) != 0) { 431c10c16deSRichard Lowe ... 432c10c16deSRichard Lowe} 433c10c16deSRichard Loweif ((devidstr = devid_str_encode(devid, minor_name)) == 0) { 434c10c16deSRichard Lowe ... 435c10c16deSRichard Lowe} 436c10c16deSRichard Loweprintf("devid %s\en", devidstr); 437c10c16deSRichard Lowedevid_str_free(devidstr); 438c10c16deSRichard Lowedevid_free(devid); 439c10c16deSRichard Lowedevid_str_free(minor_name); 44046d46cd4SYuri Pankov.Ed 44146d46cd4SYuri Pankov.It Xo 44246d46cd4SYuri Pankov.Sy Example 2 44346d46cd4SYuri PankovUsing 44446d46cd4SYuri Pankov.Fn devid_deviceid_to_nmlist 44546d46cd4SYuri Pankovand 44646d46cd4SYuri Pankov.Fn devid_free_nmlist 44746d46cd4SYuri Pankov.Xc 44846d46cd4SYuri PankovThe following example shows the proper use of 44946d46cd4SYuri Pankov.Fn devid_deviceid_to_nmlist 45046d46cd4SYuri Pankovand 45146d46cd4SYuri Pankov.Fn devid_free_nmlist : 45246d46cd4SYuri Pankov.Bd -literal 453c10c16deSRichard Lowedevid_nmlist_t *list = NULL; 454c10c16deSRichard Loweint err; 45546d46cd4SYuri Pankov 456c10c16deSRichard Loweif (devid_deviceid_to_nmlist("/dev/rdsk", devid, 457c10c16deSRichard Lowe minor_name, &list)) 458c10c16deSRichard Lowe return (-1); 459c10c16deSRichard Lowe/* loop through list and process device names and numbers */ 460c10c16deSRichard Lowedevid_free_nmlist(list); 46146d46cd4SYuri Pankov.Ed 46246d46cd4SYuri Pankov.El 46346d46cd4SYuri Pankov.Sh MT-LEVEL 46446d46cd4SYuri Pankov.Sy MT-Safe 46546d46cd4SYuri Pankov.Sh INTERFACE STABILITY 46646d46cd4SYuri Pankov.Sy Stable 46746d46cd4SYuri Pankov.Sh SEE ALSO 46846d46cd4SYuri Pankov.Xr free 3C , 46946d46cd4SYuri Pankov.Xr libdevid 3LIB , 470*bbf21555SRichard Lowe.Xr attributes 7 , 47146d46cd4SYuri Pankov.Xr ddi_devid_compare 9F 472