Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/share/examples/ses/srcs/getobjmap.c
39499 views
1
/*
2
* Copyright (c) 2000 by Matthew Jacob
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions, and the following disclaimer,
10
* without modification, immediately at the beginning of the file.
11
* 2. The name of the author may not be used to endorse or promote products
12
* derived from this software without specific prior written permission.
13
*
14
* Alternatively, this software may be distributed under the terms of the
15
* the GNU Public License ("GPL").
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
21
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* Matthew Jacob
30
* Feral Software
31
* [email protected]
32
*/
33
34
#include <unistd.h>
35
#include <stddef.h>
36
#include <stdint.h>
37
#include <stdlib.h>
38
#include <stdio.h>
39
#include <fcntl.h>
40
#include <sys/ioctl.h>
41
#include <cam/scsi/scsi_all.h>
42
#include <cam/scsi/scsi_ses.h>
43
44
#include "eltsub.h"
45
46
int
47
main(int a, char **v)
48
{
49
ses_object *objp;
50
int nobj, fd, i;
51
52
while (*++v) {
53
fd = open(*v, O_RDONLY);
54
if (fd < 0) {
55
perror(*v);
56
continue;
57
}
58
if (ioctl(fd, SESIOC_GETNOBJ, (caddr_t) &nobj) < 0) {
59
perror("SESIOC_GETNOBJ");
60
(void) close(fd);
61
continue;
62
}
63
fprintf(stdout, "%s: %d objects\n", *v, nobj);
64
if (nobj == 0) {
65
(void) close(fd);
66
continue;
67
}
68
objp = calloc(nobj, sizeof (ses_object));
69
if (objp == NULL) {
70
perror("calloc");
71
(void) close(fd);
72
continue;
73
}
74
if (ioctl(fd, SESIOC_GETOBJMAP, (caddr_t) objp) < 0) {
75
perror("SESIOC_GETOBJMAP");
76
(void) close(fd);
77
continue;
78
}
79
for (i = 0; i < nobj; i++) {
80
printf(" Object %d: ID 0x%x Type '%s'\n", i,
81
objp[i].obj_id, geteltnm((int)objp[i].object_type));
82
}
83
free(objp);
84
(void) close(fd);
85
}
86
return (0);
87
}
88
89