1 /*
2                                   NETWIB
3                              Network library
4                 Copyright(c) 1999-2010 Laurent Constantin
5                                   -----
6 
7   Main server   : http://www.laurentconstantin.com/
8   Backup server : http://laurentconstantin.free.fr/
9   [my current email address is on the web servers]
10 
11                                   -----
12   This file is part of Netwib.
13 
14   Netwib is free software: you can redistribute it and/or modify
15   it under the terms of the GNU General Public License version 3
16   as published by the Free Software Foundation.
17 
18   Netwib is distributed in the hope that it will be useful,
19   but WITHOUT ANY WARRANTY; without even the implied warranty of
20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21   GNU General Public License for more details (http://www.gnu.org/).
22 
23 ------------------------------------------------------------------------
24 */
25 
26 #include <netwib/inc/maininc.h>
27 
28 /*-------------------------------------------------------------*/
netwib_internal_version(netwib_uint32 * pversionmajor,netwib_uint32 * pversionminor,netwib_uint32 * pversionmicro)29 netwib_err netwib_internal_version(netwib_uint32 *pversionmajor,
30                                    netwib_uint32 *pversionminor,
31                                    netwib_uint32 *pversionmicro)
32 {
33 
34   if (pversionmajor != NULL) *pversionmajor = NETWIBDEF_VERSIONMAJOR;
35   if (pversionminor != NULL) *pversionminor = NETWIBDEF_VERSIONMINOR;
36   if (pversionmicro != NULL) *pversionmicro = NETWIBDEF_VERSIONMICRO;
37 
38   return(NETWIB_ERR_OK);
39 }
40 
41 /*-------------------------------------------------------------*/
netwib_buf_append_internal2(netwib_buf * poutbuf)42 static netwib_err netwib_buf_append_internal2(netwib_buf *poutbuf)
43 {
44 
45 #define netwib_co_s(n,st) netwib_er(netwib_buf_append_fmt(poutbuf, "%s=\"%s\"\n", n, st));
46 #define netwib_co_i(n,i) netwib_er(netwib_buf_append_fmt(poutbuf, "%s=%{uint32}\n", n, i));
47 
48   netwib_co_s("NETWIBDEF_SYSNAME",
49               NETWIBDEF_SYSNAME);
50   netwib_co_s("NETWIBDEF_SYSARCH",
51               NETWIBDEF_SYSARCH);
52   netwib_co_i("NETWIBDEF_ARCH_ENDIAN",
53               NETWIBDEF_ARCH_ENDIAN);
54   netwib_co_i("NETWIBDEF_ARCH_BITS",
55               NETWIBDEF_ARCH_BITS);
56   netwib_co_i("NETWIBDEF_ARCH_ALIGN",
57               NETWIBDEF_ARCH_ALIGN);
58   netwib_co_s("NETWIBDEF_VERSION",
59               NETWIBDEF_VERSION);
60   netwib_co_i("NETWIBDEF_VERSIONMAJOR",
61               NETWIBDEF_VERSIONMAJOR);
62   netwib_co_i("NETWIBDEF_VERSIONMINOR",
63               NETWIBDEF_VERSIONMINOR);
64   netwib_co_i("NETWIBDEF_VERSIONMICRO",
65               NETWIBDEF_VERSIONMICRO);
66   netwib_co_i("NETWIBDEF_LIBPTHREADINSTALLED",
67               NETWIBDEF_LIBPTHREADINSTALLED);
68   netwib_co_i("NETWIBDEF_LIBPTHREADFROMDCE",
69               NETWIBDEF_LIBPTHREADFROMDCE);
70   netwib_co_i("NETWIBDEF_LIBPTHREADFROMMIT",
71               NETWIBDEF_LIBPTHREADFROMMIT);
72   netwib_co_i("NETWIBDEF_LIBPCAPINSTALLED",
73               NETWIBDEF_LIBPCAPINSTALLED);
74   netwib_co_i("NETWIBDEF_LIBPCAPFROMREDHAT",
75               NETWIBDEF_LIBPCAPFROMREDHAT);
76   netwib_co_i("NETWIBDEF_LIBNETINSTALLED",
77               NETWIBDEF_LIBNETINSTALLED);
78   netwib_co_i("NETWIBDEF_LIBNETVERSION11",
79               NETWIBDEF_LIBNETVERSION11);
80   netwib_co_i("NETWIBDEF_LIBUTILINSTALLED",
81               NETWIBDEF_LIBUTILINSTALLED);
82   netwib_co_s("NETWIBDEF_PROGCC",
83               NETWIBDEF_PROGCC);
84   netwib_co_i("NETWIBDEF_PROGCCALIAS",
85               NETWIBDEF_PROGCCALIAS);
86   netwib_co_i("NETWIBDEF_PROGCCWUNDEF",
87               NETWIBDEF_PROGCCWUNDEF);
88   netwib_co_i("NETWIBDEF_PROGCCWSIGNC",
89               NETWIBDEF_PROGCCWSIGNC);
90   netwib_co_i("NETWIBDEF_PROGCCWEXTRA",
91               NETWIBDEF_PROGCCWEXTRA);
92   netwib_co_s("NETWIBDEF_PROGAR",
93               NETWIBDEF_PROGAR);
94   netwib_co_s("NETWIBDEF_PROGRANLIB",
95               NETWIBDEF_PROGRANLIB);
96   netwib_co_s("NETWIBDEF_PROGGREP",
97               NETWIBDEF_PROGGREP);
98   netwib_co_s("NETWIBDEF_INSTPREFIX",
99               NETWIBDEF_INSTPREFIX);
100   netwib_co_s("NETWIBDEF_INSTINCLUDE",
101               NETWIBDEF_INSTINCLUDE);
102   netwib_co_s("NETWIBDEF_INSTLIB",
103               NETWIBDEF_INSTLIB);
104   netwib_co_s("NETWIBDEF_INSTBIN",
105               NETWIBDEF_INSTBIN);
106   netwib_co_s("NETWIBDEF_INSTMAN",
107               NETWIBDEF_INSTMAN);
108   netwib_co_s("NETWIBDEF_INSTMAN3",
109               NETWIBDEF_INSTMAN3);
110   netwib_co_i("NETWIBDEF_SUPPORT_SNIFF",
111               NETWIBDEF_SUPPORT_SNIFF);
112   netwib_co_i("NETWIBDEF_SUPPORT_SPOOF",
113               NETWIBDEF_SUPPORT_SPOOF);
114   netwib_co_i("NETWIBDEF_SUPPORT_ENCODETYPE_PCAP",
115               NETWIBDEF_SUPPORT_ENCODETYPE_PCAP);
116   netwib_co_i("NETWIBDEF_HAVEINCL_PTHREAD",
117               NETWIBDEF_HAVEINCL_PTHREAD);
118   netwib_co_i("NETWIBDEF_HAVEINCL_STROPTS",
119               NETWIBDEF_HAVEINCL_STROPTS);
120   netwib_co_i("NETWIBDEF_HAVEINCL_SCHED",
121               NETWIBDEF_HAVEINCL_SCHED);
122   netwib_co_i("NETWIBDEF_HAVEINCL_PTY",
123               NETWIBDEF_HAVEINCL_PTY);
124   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_POLL",
125               NETWIBDEF_HAVEINCL_SYS_POLL);
126   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_PARAM",
127               NETWIBDEF_HAVEINCL_SYS_PARAM);
128   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_SYSCTL",
129               NETWIBDEF_HAVEINCL_SYS_SYSCTL);
130   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_IOCTL",
131               NETWIBDEF_HAVEINCL_SYS_IOCTL);
132   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_SOCKIO",
133               NETWIBDEF_HAVEINCL_SYS_SOCKIO);
134   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_DLPI",
135               NETWIBDEF_HAVEINCL_SYS_DLPI);
136   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_BUFMOD",
137               NETWIBDEF_HAVEINCL_SYS_BUFMOD);
138   netwib_co_i("NETWIBDEF_HAVEINCL_SYS_MMAN",
139               NETWIBDEF_HAVEINCL_SYS_MMAN);
140   netwib_co_i("NETWIBDEF_HAVEINCL_NET_ETHERNET",
141               NETWIBDEF_HAVEINCL_NET_ETHERNET);
142   netwib_co_i("NETWIBDEF_HAVEINCL_NET_IF_ARP",
143               NETWIBDEF_HAVEINCL_NET_IF_ARP);
144   netwib_co_i("NETWIBDEF_HAVEINCL_NET_IF_TYPES",
145               NETWIBDEF_HAVEINCL_NET_IF_TYPES);
146   netwib_co_i("NETWIBDEF_HAVEINCL_NET_IF_DL",
147               NETWIBDEF_HAVEINCL_NET_IF_DL);
148   netwib_co_i("NETWIBDEF_HAVEINCL_NET_BPF",
149               NETWIBDEF_HAVEINCL_NET_BPF);
150   netwib_co_i("NETWIBDEF_HAVEINCL_NETINET_IF_ETHER",
151               NETWIBDEF_HAVEINCL_NETINET_IF_ETHER);
152   netwib_co_i("NETWIBDEF_HAVEINCL_NETINET_ETHER",
153               NETWIBDEF_HAVEINCL_NETINET_ETHER);
154   netwib_co_i("NETWIBDEF_HAVEINCL_NETPACKET_PACKET",
155               NETWIBDEF_HAVEINCL_NETPACKET_PACKET);
156   netwib_co_i("NETWIBDEF_HAVEINCL_ASM_PAGE",
157               NETWIBDEF_HAVEINCL_ASM_PAGE);
158   netwib_co_i("NETWIBDEF_HAVEINCL_MACH_MACHINE_VMPARAM",
159               NETWIBDEF_HAVEINCL_MACH_MACHINE_VMPARAM);
160   netwib_co_i("NETWIBDEF_HAVEINCL_MACHINE_PARAM",
161               NETWIBDEF_HAVEINCL_MACHINE_PARAM);
162   netwib_co_i("NETWIBDEF_HAVETYPE_SIZE_T",
163               NETWIBDEF_HAVETYPE_SIZE_T);
164   netwib_co_i("NETWIBDEF_HAVETYPE_SOCKLEN_T",
165               NETWIBDEF_HAVETYPE_SOCKLEN_T);
166   netwib_co_i("NETWIBDEF_HAVETYPE_SIGHANDLER_T",
167               NETWIBDEF_HAVETYPE_SIGHANDLER_T);
168   netwib_co_i("NETWIBDEF_HAVETYPE_SIG_T",
169               NETWIBDEF_HAVETYPE_SIG_T);
170   netwib_co_i("NETWIBDEF_HAVETYPE_OFF_T",
171               NETWIBDEF_HAVETYPE_OFF_T);
172   netwib_co_i("NETWIBDEF_HAVETYPE_PTHREAD_RWLOCK_T",
173               NETWIBDEF_HAVETYPE_PTHREAD_RWLOCK_T);
174   netwib_co_i("NETWIBDEF_HAVETYPE_SOCKADDR_IN6",
175               NETWIBDEF_HAVETYPE_SOCKADDR_IN6);
176   netwib_co_i("NETWIBDEF_HAVEFIELD_TM_GMTOFF",
177               NETWIBDEF_HAVEFIELD_TM_GMTOFF);
178   netwib_co_i("NETWIBDEF_HAVEFIELD_SOCKADDR_SALEN",
179               NETWIBDEF_HAVEFIELD_SOCKADDR_SALEN);
180   netwib_co_i("NETWIBDEF_HAVEFIELD_SOCKADDRIN_SINLEN",
181               NETWIBDEF_HAVEFIELD_SOCKADDRIN_SINLEN);
182   netwib_co_i("NETWIBDEF_HAVEFIELD_SOCKADDRIN6_SIN6LEN",
183               NETWIBDEF_HAVEFIELD_SOCKADDRIN6_SIN6LEN);
184   netwib_co_i("NETWIBDEF_HAVEFUNC_ETHER_NTOHOST",
185               NETWIBDEF_HAVEFUNC_ETHER_NTOHOST);
186   netwib_co_i("NETWIBDEF_HAVEFUNC_ETHER_HOSTTON",
187               NETWIBDEF_HAVEFUNC_ETHER_HOSTTON);
188   netwib_co_i("NETWIBDEF_HAVEFUNC_HSTRERROR",
189               NETWIBDEF_HAVEFUNC_HSTRERROR);
190   netwib_co_i("NETWIBDEF_HAVEFUNC_SNPRINTF",
191               NETWIBDEF_HAVEFUNC_SNPRINTF);
192   netwib_co_i("NETWIBDEF_HAVEFUNC_PCAP_FREECODE",
193               NETWIBDEF_HAVEFUNC_PCAP_FREECODE);
194   netwib_co_i("NETWIBDEF_HAVEFUNC_PCAP_FREECODE2",
195               NETWIBDEF_HAVEFUNC_PCAP_FREECODE2);
196   netwib_co_i("NETWIBDEF_HAVEFUNC_PCAP_OPENDEAD",
197               NETWIBDEF_HAVEFUNC_PCAP_OPENDEAD);
198   netwib_co_i("NETWIBDEF_HAVEFUNC_POLL",
199               NETWIBDEF_HAVEFUNC_POLL);
200   netwib_co_i("NETWIBDEF_HAVEFUNC_DIRFD",
201               NETWIBDEF_HAVEFUNC_DIRFD);
202   netwib_co_i("NETWIBDEF_HAVEFUNC_FPATHCONF",
203               NETWIBDEF_HAVEFUNC_FPATHCONF);
204   netwib_co_i("NETWIBDEF_HAVEFUNC_PATHCONF",
205               NETWIBDEF_HAVEFUNC_PATHCONF);
206   netwib_co_i("NETWIBDEF_HAVEFUNC_SYSCONF",
207               NETWIBDEF_HAVEFUNC_SYSCONF);
208   netwib_co_i("NETWIBDEF_HAVEFUNC_GETPAGESIZE",
209               NETWIBDEF_HAVEFUNC_GETPAGESIZE);
210   netwib_co_i("NETWIBDEF_HAVEFUNC_GETRLIMIT",
211               NETWIBDEF_HAVEFUNC_GETRLIMIT);
212   netwib_co_i("NETWIBDEF_HAVEFUNC_NANOSLEEP",
213               NETWIBDEF_HAVEFUNC_NANOSLEEP);
214   netwib_co_i("NETWIBDEF_HAVEFUNC_USLEEP",
215               NETWIBDEF_HAVEFUNC_USLEEP);
216   netwib_co_i("NETWIBDEF_HAVEFUNC_GETTIMEOFDAY",
217               NETWIBDEF_HAVEFUNC_GETTIMEOFDAY);
218   netwib_co_i("NETWIBDEF_HAVEFUNC_CLOCK_GETTIME",
219               NETWIBDEF_HAVEFUNC_CLOCK_GETTIME);
220   netwib_co_i("NETWIBDEF_HAVEFUNC_PTHREAD_DELAY_NP",
221               NETWIBDEF_HAVEFUNC_PTHREAD_DELAY_NP);
222   netwib_co_i("NETWIBDEF_HAVEFUNC_PTHREAD_MUTEX_TIMEDLOCK",
223               NETWIBDEF_HAVEFUNC_PTHREAD_MUTEX_TIMEDLOCK);
224   netwib_co_i("NETWIBDEF_HAVEFUNC_PTHREAD_RWLOCK_TIMEDRDLOCK",
225               NETWIBDEF_HAVEFUNC_PTHREAD_RWLOCK_TIMEDRDLOCK);
226   netwib_co_i("NETWIBDEF_HAVEFUNC_PTHREAD_RWLOCK_TIMEDWRLOCK",
227               NETWIBDEF_HAVEFUNC_PTHREAD_RWLOCK_TIMEDWRLOCK);
228   netwib_co_i("NETWIBDEF_HAVEFUNC_PTHREAD_YIELD",
229               NETWIBDEF_HAVEFUNC_PTHREAD_YIELD);
230   netwib_co_i("NETWIBDEF_HAVEFUNC_SCHED_YIELD",
231               NETWIBDEF_HAVEFUNC_SCHED_YIELD);
232   netwib_co_i("NETWIBDEF_HAVEFUNC_GETPWNAM_R",
233               NETWIBDEF_HAVEFUNC_GETPWNAM_R);
234   netwib_co_i("NETWIBDEF_HAVEFUNC_GETGRNAM_R",
235               NETWIBDEF_HAVEFUNC_GETGRNAM_R);
236   netwib_co_i("NETWIBDEF_HAVEFUNC_GETGRGID_R",
237               NETWIBDEF_HAVEFUNC_GETGRGID_R);
238   netwib_co_i("NETWIBDEF_HAVEFUNC_READDIR_R",
239               NETWIBDEF_HAVEFUNC_READDIR_R);
240   netwib_co_i("NETWIBDEF_HAVEFUNC_GETHOSTBYNAME_R",
241               NETWIBDEF_HAVEFUNC_GETHOSTBYNAME_R);
242   netwib_co_i("NETWIBDEF_HAVEFUNC_GETHOSTBYADDR_R",
243               NETWIBDEF_HAVEFUNC_GETHOSTBYADDR_R);
244   netwib_co_i("NETWIBDEF_HAVEFUNC_GETNAMEINFO",
245               NETWIBDEF_HAVEFUNC_GETNAMEINFO);
246   netwib_co_i("NETWIBDEF_HAVEFUNC_GETADDRINFO",
247               NETWIBDEF_HAVEFUNC_GETADDRINFO);
248   netwib_co_i("NETWIBDEF_HAVEFUNC_GETIPNODEBYNAME",
249               NETWIBDEF_HAVEFUNC_GETIPNODEBYNAME);
250   netwib_co_i("NETWIBDEF_HAVEFUNC_GETIPNODEBYADDR",
251               NETWIBDEF_HAVEFUNC_GETIPNODEBYADDR);
252   netwib_co_i("NETWIBDEF_HAVEFUNC_LOCALTIME_R",
253               NETWIBDEF_HAVEFUNC_LOCALTIME_R);
254   netwib_co_i("NETWIBDEF_HAVEVAR_HERRNO",
255               NETWIBDEF_HAVEVAR_HERRNO);
256   netwib_co_i("NETWIBDEF_HAVEVAR_PATH_MAX",
257               NETWIBDEF_HAVEVAR_PATH_MAX);
258   netwib_co_i("NETWIBDEF_HAVEVAR_NAME_MAX",
259               NETWIBDEF_HAVEVAR_NAME_MAX);
260   netwib_co_i("NETWIBDEF_HAVEVAR_PAGE_SIZE",
261               NETWIBDEF_HAVEVAR_PAGE_SIZE);
262   netwib_co_i("NETWIBDEF_HAVEVAR_PAGESIZE",
263               NETWIBDEF_HAVEVAR_PAGESIZE);
264   netwib_co_i("NETWIBDEF_HAVEVAR_BIOCSHDRCMPLT",
265               NETWIBDEF_HAVEVAR_BIOCSHDRCMPLT);
266   netwib_co_i("NETWIBDEF_HAVEVAR_SIOCGLIFCONF",
267               NETWIBDEF_HAVEVAR_SIOCGLIFCONF);
268   netwib_co_i("NETWIBDEF_HAVEVAR_AF_INET6",
269               NETWIBDEF_HAVEVAR_AF_INET6);
270   netwib_co_i("NETWIBDEF_HAVEVAR_SC_GETPW_R_SIZE_MAX",
271               NETWIBDEF_HAVEVAR_SC_GETPW_R_SIZE_MAX);
272   netwib_co_i("NETWIBDEF_HAVEVAR_SC_GETGR_R_SIZE_MAX",
273               NETWIBDEF_HAVEVAR_SC_GETGR_R_SIZE_MAX);
274 
275   return(NETWIB_ERR_OK);
276 }
277 
278 /*-------------------------------------------------------------*/
netwib_buf_append_internal(netwib_buf * pbuf)279 netwib_err netwib_buf_append_internal(netwib_buf *pbuf)
280 {
281   netwib_uint32 savedsize;
282   netwib_err ret;
283 
284   if (pbuf == NULL) {
285     return(NETWIB_ERR_OK);
286   }
287 
288   /* save position in case of error */
289   savedsize = netwib__buf_ref_data_size(pbuf);
290 
291   ret = netwib_buf_append_internal2(pbuf);
292 
293   /* on error, restore first pos */
294   if (ret != NETWIB_ERR_OK) {
295     pbuf->endoffset = pbuf->beginoffset + savedsize;
296   }
297   return(ret);
298 }
299 
300 /*-------------------------------------------------------------*/
netwib_internal_display(void)301 netwib_err netwib_internal_display(void)
302 {
303   netwib_buf buf;
304   netwib_string pc;
305 
306   netwib_er(netwib_buf_init_mallocdefault(&buf));
307   netwib_er(netwib_buf_append_internal2(&buf));
308   netwib_er(netwib_buf_ref_string(&buf, &pc));
309   printf("%s", pc);
310   fflush(stdout);
311   netwib_er(netwib_buf_close(&buf));
312 
313   return(NETWIB_ERR_OK);
314 }
315