]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/ntp/libntp/findconfig.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / ntp / libntp / findconfig.c
1
2 #ifdef HAVE_CONFIG_H
3 # include <config.h>
4 #endif
5
6 #ifdef NEED_HPUX_FINDCONFIG
7 #include <string.h>
8 #include <stdio.h>
9 #include <sys/types.h>
10 #include <sys/stat.h>
11 #include <sys/utsname.h>
12 #include <unistd.h>
13
14 const char *
15 FindConfig(
16         const char *base
17         )
18 {
19         static char result[BUFSIZ];
20         char hostname[BUFSIZ], *cp;
21         struct stat sbuf; 
22         struct utsname unamebuf; 
23
24         /* All keyed by initial target being a directory */
25         strlcpy(result, base, sizeof(result));
26         if (stat(result, &sbuf) == 0) {
27                 if (S_ISDIR(sbuf.st_mode)) {
28
29                         /* First choice is my hostname */
30                         if (gethostname(hostname, BUFSIZ) >= 0) {
31                                 snprintf(result, sizeof(result), "%s/%s", base, hostname);
32                                 if (stat(result, &sbuf) == 0) {
33                                         goto outahere;
34                                 } else {
35
36                                         /* Second choice is of form default.835 */
37                                         (void) uname(&unamebuf);
38                                         if (strncmp(unamebuf.machine, "9000/", 5) == 0)
39                                             cp = unamebuf.machine + 5;
40                                         else
41                                             cp = unamebuf.machine;
42                                         snprintf(result, sizeof(result), "%s/default.%s", base, cp);
43                                         if (stat(result, &sbuf) == 0) {
44                                                 goto outahere;
45                                         } else {
46
47                                                 /* Last choice is just default */
48                                                 snprintf(result, sizeof(result), "%s/default", base);
49                                                 if (stat(result, &sbuf) == 0) {
50                                                         goto outahere;
51                                                 } else {
52                                                         strlcpy(result,
53                                                                 "/not/found",
54                                                                 sizeof(result));
55                                                 }
56                                         }
57                                 }
58                         } 
59                 } 
60         }
61     outahere:
62         return(result);
63 }
64 #else
65 #include "ntp_stdlib.h"
66
67 const char *
68 FindConfig(
69         const char *base
70         )
71 {
72         return base;
73 }
74 #endif