xref: /illumos-gate/usr/src/man/man3devid/devid_get.3devid (revision bbf215553c7233fbab8a0afdf1fac74c44781867)
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