1169303Spjd/*-
2169303Spjd * Copyright (c) 2007 Pawel Jakub Dawidek <pjd@FreeBSD.org>
3169303Spjd * All rights reserved.
4169303Spjd *
5169303Spjd * Redistribution and use in source and binary forms, with or without
6169303Spjd * modification, are permitted provided that the following conditions
7169303Spjd * are met:
8169303Spjd * 1. Redistributions of source code must retain the above copyright
9169303Spjd *    notice, this list of conditions and the following disclaimer.
10169303Spjd * 2. Redistributions in binary form must reproduce the above copyright
11169303Spjd *    notice, this list of conditions and the following disclaimer in the
12169303Spjd *    documentation and/or other materials provided with the distribution.
13169303Spjd *
14169303Spjd * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
15169303Spjd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16169303Spjd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17169303Spjd * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
18169303Spjd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19169303Spjd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20169303Spjd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21169303Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22169303Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23169303Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24169303Spjd * SUCH DAMAGE.
25169303Spjd */
26169303Spjd
27169303Spjd#include <sys/cdefs.h>
28169303Spjd__FBSDID("$FreeBSD$");
29169303Spjd
30169303Spjd#include <sys/param.h>
31169303Spjd#include <sys/ioctl.h>
32169303Spjd#include <stdio.h>
33169303Spjd#include <unistd.h>
34169303Spjd#include <string.h>
35169303Spjd#include <errno.h>
36169303Spjd#include <libgeom.h>
37169303Spjd#include <devid.h>
38169303Spjd
39169303Spjdint
40169303Spjddevid_str_decode(char *devidstr, ddi_devid_t *retdevid, char **retminor_name)
41169303Spjd{
42169303Spjd
43169303Spjd	if (strlcpy(retdevid->devid, devidstr, sizeof(retdevid->devid)) >=
44169303Spjd	    sizeof(retdevid->devid)) {
45169303Spjd		return (EINVAL);
46169303Spjd	}
47169303Spjd	*retminor_name = strdup("");
48238112Spjd	if (*retminor_name == NULL)
49169303Spjd		return (ENOMEM);
50169303Spjd	return (0);
51169303Spjd}
52169303Spjd
53169303Spjdint
54169303Spjddevid_deviceid_to_nmlist(char *search_path, ddi_devid_t devid, char *minor_name,
55169303Spjd    devid_nmlist_t **retlist)
56169303Spjd{
57169303Spjd	char path[MAXPATHLEN];
58169303Spjd	char *dst;
59169303Spjd
60169303Spjd	if (g_get_name(devid.devid, path, sizeof(path)) == -1)
61169303Spjd		return (errno);
62169303Spjd	*retlist = malloc(sizeof(**retlist));
63169303Spjd	if (*retlist == NULL)
64169303Spjd		return (ENOMEM);
65169303Spjd	if (strlcpy((*retlist)[0].devname, path,
66169303Spjd	    sizeof((*retlist)[0].devname)) >= sizeof((*retlist)[0].devname)) {
67169303Spjd		free(*retlist);
68169303Spjd		return (ENAMETOOLONG);
69169303Spjd	}
70169303Spjd	return (0);
71169303Spjd}
72169303Spjd
73169303Spjdvoid
74169303Spjddevid_str_free(char *str)
75169303Spjd{
76169303Spjd
77169303Spjd	free(str);
78169303Spjd}
79169303Spjd
80169303Spjdvoid
81169303Spjddevid_free(ddi_devid_t devid)
82169303Spjd{
83169303Spjd	/* Do nothing. */
84169303Spjd}
85169303Spjd
86169303Spjdvoid
87169303Spjddevid_free_nmlist(devid_nmlist_t *list)
88169303Spjd{
89169303Spjd
90169303Spjd	free(list);
91169303Spjd}
92169303Spjd
93169303Spjdint
94169303Spjddevid_get(int fd, ddi_devid_t *retdevid)
95169303Spjd{
96169303Spjd
97185174Spjd	return (ENOENT);
98169303Spjd}
99169303Spjd
100169303Spjdint
101169303Spjddevid_get_minor_name(int fd, char **retminor_name)
102169303Spjd{
103169303Spjd
104169303Spjd	*retminor_name = strdup("");
105169303Spjd	if (*retminor_name == NULL)
106169303Spjd		return (ENOMEM);
107169303Spjd	return (0);
108169303Spjd}
109169303Spjd
110169303Spjdchar *
111169303Spjddevid_str_encode(ddi_devid_t devid, char *minor_name)
112169303Spjd{
113169303Spjd
114169303Spjd	return (strdup(devid.devid));
115169303Spjd}
116