1
0
mirror of https://github.com/samba-team/samba.git synced 2025-06-22 07:17:05 +03:00
Rusty Russell d9ce876ea9 ccan: import err module.from ccan revision 5add556a1cb64b49a664506aa76216d885b22c97
This allows us to avoid err.h in failtest.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2012-06-09 15:41:18 +09:30

154 lines
2.9 KiB
C

#include <ccan/err/err.c>
#include <ccan/tap/tap.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#define BUFFER_MAX 1024
int main(int argc, char *argv[])
{
int pfd[2];
const char *base;
plan_tests(24);
err_set_progname(argv[0]);
/* In case it only prints out the basename of argv[0]. */
base = strrchr(argv[0], '/');
if (base)
base++;
else
base = argv[0];
/* Test err() in child */
pipe(pfd);
fflush(stdout);
if (fork()) {
char buffer[BUFFER_MAX+1];
unsigned int i;
int status;
/* We are parent. */
close(pfd[1]);
for (i = 0; i < BUFFER_MAX; i++) {
if (read(pfd[0], buffer + i, 1) == 0) {
buffer[i] = '\0';
ok1(strstr(buffer, "running err:"));
ok1(strstr(buffer, strerror(ENOENT)));
ok1(strstr(buffer, base));
ok1(buffer[i-1] == '\n');
break;
}
}
close(pfd[0]);
ok1(wait(&status) != -1);
ok1(WIFEXITED(status));
ok1(WEXITSTATUS(status) == 17);
} else {
close(pfd[0]);
dup2(pfd[1], STDERR_FILENO);
errno = ENOENT;
err(17, "running %s", "err");
abort();
}
/* Test errx() in child */
pipe(pfd);
fflush(stdout);
if (fork()) {
char buffer[BUFFER_MAX+1];
unsigned int i;
int status;
/* We are parent. */
close(pfd[1]);
for (i = 0; i < BUFFER_MAX; i++) {
if (read(pfd[0], buffer + i, 1) == 0) {
buffer[i] = '\0';
ok1(strstr(buffer, "running errx\n"));
ok1(strstr(buffer, base));
break;
}
}
close(pfd[0]);
ok1(wait(&status) != -1);
ok1(WIFEXITED(status));
ok1(WEXITSTATUS(status) == 17);
} else {
close(pfd[0]);
dup2(pfd[1], STDERR_FILENO);
errx(17, "running %s", "errx");
abort();
}
/* Test warn() in child */
pipe(pfd);
fflush(stdout);
if (fork()) {
char buffer[BUFFER_MAX+1];
unsigned int i;
int status;
/* We are parent. */
close(pfd[1]);
for (i = 0; i < BUFFER_MAX; i++) {
if (read(pfd[0], buffer + i, 1) == 0) {
buffer[i] = '\0';
ok1(strstr(buffer, "running warn:"));
ok1(strstr(buffer, strerror(ENOENT)));
ok1(strstr(buffer, base));
ok1(buffer[i-1] == '\n');
break;
}
}
close(pfd[0]);
ok1(wait(&status) != -1);
ok1(WIFEXITED(status));
ok1(WEXITSTATUS(status) == 17);
} else {
close(pfd[0]);
dup2(pfd[1], STDERR_FILENO);
errno = ENOENT;
warn("running %s", "warn");
exit(17);
}
/* Test warnx() in child */
pipe(pfd);
fflush(stdout);
if (fork()) {
char buffer[BUFFER_MAX+1];
unsigned int i;
int status;
/* We are parent. */
close(pfd[1]);
for (i = 0; i < BUFFER_MAX; i++) {
if (read(pfd[0], buffer + i, 1) == 0) {
buffer[i] = '\0';
ok1(strstr(buffer, "running warnx\n"));
ok1(strstr(buffer, base));
break;
}
}
close(pfd[0]);
ok1(wait(&status) != -1);
ok1(WIFEXITED(status));
ok1(WEXITSTATUS(status) == 17);
} else {
close(pfd[0]);
dup2(pfd[1], STDERR_FILENO);
warnx("running %s", "warnx");
exit(17);
}
return exit_status();
}