Blame tests/t-fork.c

Packit 5e354d
/* t-fork.c
Packit 5e354d
 * Copyright 2016 g10 Code GmbH
Packit 5e354d
 *
Packit 5e354d
 * This file is free software; as a special exception the author gives
Packit 5e354d
 * unlimited permission to copy and/or distribute it, with or without
Packit 5e354d
 * modifications, as long as this notice is preserved.
Packit 5e354d
 *
Packit 5e354d
 * This file is distributed in the hope that it will be useful, but
Packit 5e354d
 * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
Packit 5e354d
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Packit 5e354d
 */
Packit 5e354d
Packit 5e354d
#include <sys/types.h>
Packit 5e354d
#include <sys/wait.h>
Packit 5e354d
#include <unistd.h>
Packit 5e354d
#include "t-support.h"
Packit 5e354d
Packit 5e354d
/* This is a test if nPth can allow daemon-like applications
Packit 5e354d
   initializing earlier.
Packit 5e354d
Packit 5e354d
   For daemon-like applications, ideally, it is expected to call
Packit 5e354d
   npth_init after fork.  This condition is not satisfied sometimes.
Packit 5e354d
Packit 5e354d
   Failure of this test means nPth implementation doesn't allow
Packit 5e354d
   npth_init after fork.  In such a case, application should be
Packit 5e354d
   modified.
Packit 5e354d
 */
Packit 5e354d
Packit 5e354d
int
Packit 5e354d
main (int argc, const char *argv[])
Packit 5e354d
{
Packit 5e354d
  int rc;
Packit 5e354d
  pid_t pid;
Packit 5e354d
Packit 5e354d
  if (argc >= 2 && !strcmp (argv[1], "--verbose"))
Packit 5e354d
    opt_verbose = 1;
Packit 5e354d
Packit 5e354d
  rc = npth_init ();
Packit 5e354d
  fail_if_err (rc);
Packit 5e354d
Packit 5e354d
  pid = fork ();
Packit 5e354d
  if (pid == (pid_t)-1)
Packit 5e354d
    fail_msg ("fork failed");
Packit 5e354d
  else if (pid)
Packit 5e354d
   {
Packit 5e354d
     int status;
Packit 5e354d
Packit 5e354d
     info_msg ("forked");
Packit 5e354d
     wait (&status);
Packit 5e354d
     fail_if_err (status);
Packit 5e354d
   }
Packit 5e354d
  else
Packit 5e354d
    {
Packit 5e354d
      info_msg ("child exit");
Packit 5e354d
      npth_usleep (1000);     /* Let NPTH enter, sleep, and leave.  */
Packit 5e354d
    }
Packit 5e354d
Packit 5e354d
  return 0;
Packit 5e354d
}