1 /* wait_check.c: wait, check and log */
2 
3 /*
4  * Copyright (C) 1999 Uwe Ohse
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19  */
20 
21 #include "config.h"
22 #include <sys/types.h>
23 
24 #include <netinet/in.h>
25 #include <syslog.h>
26 #include <sys/wait.h>
27 #include <unistd.h>
28 
29 #include "str_ulong.h"
30 #include "utftpd.h" /* get my prototype */
31 
32 int
33 wait_check_and_log(pid_t pid)
34 {
35 	int status;
36 	pid=waitpid(pid,&status,0);
37 	if (WIFEXITED(status)) {
38 		char nb[STR_ULONG];
39 		int ec=WEXITSTATUS(status);
40 		if (ec!=0) {
utftpd_nak(int peer,int ec,const char * et,struct utftpd_ctrl * flags)41 			str_ulong(nb,ec);
42 			syslog(LOG_ERR,"child terminated with code %s",nb);
43 			return -1;
44 		}
45 	} else if (WIFSIGNALED(status)) {
46 		char nb[STR_ULONG];
47 		int sig=WTERMSIG(status);
48 		str_ulong(nb,sig);
49 		syslog(LOG_ERR,"child terminated by signal %s",nb);
50 		return -1;
51 	}
52 	return 0;
53 }
54