/*      $NetBSD: findconfig.c,v 1.5 2020/05/25 20:47:24 christos Exp $  */


#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#ifdef NEED_HPUX_FINDCONFIG
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/utsname.h>
#include <unistd.h>

const char *
FindConfig(
       const char *base
       )
{
       static char result[BUFSIZ];
       char hostname[BUFSIZ], *cp;
       struct stat sbuf;
       struct utsname unamebuf;

       /* All keyed by initial target being a directory */
       strlcpy(result, base, sizeof(result));
       if (stat(result, &sbuf) == 0) {
               if (S_ISDIR(sbuf.st_mode)) {

                       /* First choice is my hostname */
                       if (gethostname(hostname, BUFSIZ) >= 0) {
                               snprintf(result, sizeof(result), "%s/%s", base, hostname);
                               if (stat(result, &sbuf) == 0) {
                                       goto outahere;
                               } else {

                                       /* Second choice is of form default.835 */
                                       (void) uname(&unamebuf);
                                       if (strncmp(unamebuf.machine, "9000/", 5) == 0)
                                           cp = unamebuf.machine + 5;
                                       else
                                           cp = unamebuf.machine;
                                       snprintf(result, sizeof(result), "%s/default.%s", base, cp);
                                       if (stat(result, &sbuf) == 0) {
                                               goto outahere;
                                       } else {

                                               /* Last choice is just default */
                                               snprintf(result, sizeof(result), "%s/default", base);
                                               if (stat(result, &sbuf) == 0) {
                                                       goto outahere;
                                               } else {
                                                       strlcpy(result,
                                                               "/not/found",
                                                               sizeof(result));
                                               }
                                       }
                               }
                       }
               }
       }
   outahere:
       return(result);
}
#else
#include "ntp_stdlib.h"

const char *
FindConfig(
       const char *base
       )
{
       return base;
}
#endif