kconfig: use pkg-config for ncurses detection
[akaros.git] / user / iplib / netmkaddr.c
1 /*
2  * This file is part of the UCB release of Plan 9. It is subject to the license
3  * terms in the LICENSE file found in the top-level directory of this
4  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
5  * part of the UCB release of Plan 9, including this file, may be copied,
6  * modified, propagated, or distributed except according to the terms contained
7  * in the LICENSE file.
8  */
9 #include <stdlib.h>
10
11 #include <fcntl.h>
12 #include <stdio.h>
13 #include <string.h>
14 #include <sys/types.h>
15 #include <unistd.h>
16
17 /* Makes an address suitable for dialing or announcing.  Takes an address along
18  * with a default network and service to use if they are not specified in the
19  * address.
20  *
21  * Returns a pointer to data in buf[buf_sz] holding the actual address to use.
22  * The caller manages the memory for buf.
23  *
24  * If you pass in only one ! in linear, this assumes this ! was between the net
25  * and the host.  If you pass in no !s, we'll build one from defnet/defsrv. */
26 char *netmkaddr(char *linear, char *defnet, char *defsrv, char *buf,
27                 size_t buf_sz)
28 {
29         char *cp;
30
31         /*
32          *  dump network name
33          */
34         cp = strchr(linear, '!');
35         if (cp == 0) {
36                 if (defnet == 0) {
37                         if (defsrv)
38                                 snprintf(buf, buf_sz, "net!%s!%s", linear,
39                                          defsrv);
40                         else
41                                 snprintf(buf, buf_sz, "net!%s", linear);
42                 } else {
43                         if (defsrv)
44                                 snprintf(buf, buf_sz, "%s!%s!%s", defnet,
45                                          linear, defsrv);
46                         else
47                                 snprintf(buf, buf_sz, "%s!%s", defnet, linear);
48                 }
49                 return buf;
50         }
51
52         /*
53          *  if there is already a service, use it
54          */
55         cp = strchr(cp + 1, '!');
56         if (cp)
57                 return linear;
58
59         /*
60          *  add default service
61          */
62         if (defsrv == 0)
63                 return linear;
64         snprintf(buf, buf_sz, "%s!%s", linear, defsrv);
65
66         return buf;
67 }