|
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 |
}
|