1 /*
2 * system.c
3 * System definitions and capabilities.
4 * $Id: system.c,v 1.5 2004/11/14 02:45:51 cpressey Exp $
5 */
6
7 #include <sys/param.h>
8 #include <sys/sysctl.h>
9
10 #include <err.h>
11 #include <stdio.h>
12 #include <string.h>
13 #include <sysexits.h>
14
15 #include "dfui.h"
16 #include "system.h"
17
18 char *
ostype(void)19 ostype(void)
20 {
21 int mib[2];
22 size_t len;
23 char *p;
24
25 mib[0] = CTL_KERN;
26 mib[1] = KERN_OSTYPE;
27 sysctl(mib, 2, NULL, &len, NULL, 0);
28 p = malloc(len);
29 sysctl(mib, 2, p, &len, NULL, 0);
30 return p;
31 }
32
33 int
has_npipe(void)34 has_npipe(void)
35 {
36 #ifdef HAS_NPIPE
37 return 1;
38 #else
39 return 0;
40 #endif
41 }
42
43 int
has_tcp(void)44 has_tcp(void)
45 {
46 #ifdef HAS_TCP
47 return 1;
48 #else
49 return 0;
50 #endif
51 }
52
53 /*
54 * Get transport from transport name.
55 *
56 * return(0) if transport is not supported.
57 * retirn(-1) if transport unknown.
58 */
59 int
get_transport(const char * transport_name)60 get_transport(const char *transport_name)
61 {
62 if (strcmp(transport_name, "npipe") == 0) {
63 if (has_npipe())
64 return DFUI_TRANSPORT_NPIPE;
65 return(0);
66 } else if (strcmp(transport_name, "tcp") == 0) {
67 if (has_tcp())
68 return DFUI_TRANSPORT_TCP;
69 return(0);
70 }
71 return(-1);
72 }
73
74 /*
75 * Get transport upon user request
76 *
77 * Print appropriate error message to stderr
78 * and exit if transport not supported or unknown.
79 */
80 int
user_get_transport(const char * transport_name)81 user_get_transport(const char *transport_name)
82 {
83 int transport;
84
85 transport = get_transport(transport_name);
86
87 if (transport == 0) {
88 errx(EX_UNAVAILABLE, "Transport is not supported: ``%s''.\n",
89 transport_name);
90 } else if (transport < 0) {
91 errx(EX_CONFIG, "Wrong transport name: ``%s''.\n",
92 transport_name);
93 }
94
95 return(transport);
96 }
97