home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / test / testadt.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  2.8 KB  |  121 lines

  1. static    char    testinit_c[] = "$Header: /private/postgres/src/test/RCS/testadt.c,v 1.5 1990/06/07 18:20:52 cimarron Version_2 $";
  2.  
  3. #include <sys/file.h>
  4. #include <stdio.h>
  5. #include <setjmp.h>
  6. #ifndef    NODFLT
  7. #include <pwd.h>
  8. #endif
  9. #include <strings.h>
  10. #include "datadir.h"
  11. #include "skey.h"
  12. #include "log.h"
  13.  
  14. /*
  15.  *    testinit.c    - standard test program shell
  16.  */
  17.  
  18. struct    context    TopCxt = {
  19.     -1,                        /* ct_user */
  20.     -1,                        /* ct_xid */
  21.     (char *)NULL,                    /* ct_dbappnd */
  22.     (char *)NULL,                    /* ct_dbdbappnd */
  23.     DATADIR,                    /* ct_datadir */
  24.     DATADIR,                    /* ct_dbdbdir */
  25.     0                        /* ct_mmgr */
  26. };
  27. struct    context    *Cxt = &TopCxt;
  28.  
  29. main(argc, argv)
  30. int    argc;
  31. char    *argv[];
  32. {
  33.     int        uid;                /* uid_t */
  34.     int        namelen;
  35. #ifndef    NODFLT
  36.     char        *datname;
  37.     struct    passwd    *pw;
  38.     extern        endpwent();
  39. #endif
  40.     char        s[80], *t, *u;
  41.     char        *path_in();
  42.     char        *path_out();
  43.     extern        pfree();
  44.     extern    int    Err_file;
  45.     extern    int    Debug_file;
  46.     extern    jmp_buf    Warn_restart;
  47.     int        setjmp();
  48.     int        getuid();            /* uid_t */
  49.     int        geteuid();            /* uid_t */
  50.     int        setuid();
  51.     long        time();
  52.     extern        initbuf();
  53.     extern        initmmgr();
  54.     extern        initfmgr();
  55.     extern        resetmmgr();
  56.     extern        bflush();
  57.     extern        elog();
  58.  
  59.     Debug_file = fileno(stderr);
  60.     Err_file = open("/dev/null", O_WRONLY, 0666);
  61. #ifndef    NODFLT
  62.     if (argc == 1) {
  63.         if ((pw = getpwuid(uid = getuid())) == (struct passwd *)NULL)
  64.             elog(FATAL,
  65.                  "%s: failed getpwuid()",
  66.                  rindex(argv[0], '/') ?
  67.                  rindex(argv[0], '/') + 1 :
  68.                  argv[0]);
  69.         datname = pw->pw_name;
  70.         endpwent();
  71.     } else if (argc == 2)
  72.         datname = argv[1];
  73.     else
  74.         elog(FATAL,
  75.              "Usage: %s [datname]",
  76.              rindex(argv[0], '/') ? rindex(argv[0], '/') + 1 : argv[0]);
  77.     namelen = strlen(datname);
  78. #else
  79.     if (argc != 2)
  80.         elog(FATAL,
  81.              "Usage: %s datname",
  82.              rindex(argv[0], '/') ? rindex(argv[0], '/') + 1 : argv[0]);
  83.     namelen = strlen(argv[1]);
  84. #endif
  85.     if (!namelen || namelen > 16)
  86.         elog(FATAL, "Database names are limited to 1 to 16 characters");
  87.     /* XXX other checks too */
  88.     TopCxt.ct_user = uid;
  89.     TopCxt.ct_xid = time(0);
  90.     TopCxt.ct_dbappnd = TopCxt.ct_datadir + sizeof (DATADIR) - 1;
  91.     *TopCxt.ct_dbappnd++ = '/';
  92. #ifndef    NODFLT
  93.     bcopy(datname, TopCxt.ct_dbappnd, namelen);
  94. #else
  95.     bcopy(argv[1], TopCxt.ct_dbappnd, namelen);
  96. #endif
  97.     TopCxt.ct_dbappnd += namelen;
  98.     *TopCxt.ct_dbappnd++ = '/';
  99.     TopCxt.ct_dbdbappnd = TopCxt.ct_dbdbdir + sizeof (DATADIR) - 1;
  100.     bcopy("/dbdb/", TopCxt.ct_dbdbappnd, sizeof ("/dbdb/") - 1);
  101.     TopCxt.ct_dbdbappnd += sizeof ("/dbdb/") - 1;
  102.     setuid(geteuid());
  103.     initbuf();
  104.     initmmgr();
  105.     initfmgr();
  106.     if (setjmp(Warn_restart) != NULL) {
  107.         bflush();
  108.         resetmmgr();
  109.     }
  110.     for(;;) {
  111.         puts("Please enter a path (external string representation)");
  112.         scanf("%s", s);
  113.         t = path_in(s);
  114.         printf("Read %s with internal length %d\n", s, PSIZE(t));
  115.         
  116.         printf("The object returned to output form is %s\n", u = path_out(t));
  117.         pfree(t);
  118.         pfree(u);
  119.     }
  120. }
  121.