xref: /dragonfly/usr.sbin/installer/libdfui/system.c (revision 94b98a915ba84699b2a2adab9146fbc2cf617459)
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