2010-07-28 16:20:38 +04:00
/*
* Copyright ( C ) 2010 Red Hat , Inc . All rights reserved .
*
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
* of the GNU General Public License v .2 .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software Foundation ,
* Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
2009-01-12 21:45:44 +03:00
# include <unistd.h>
# include <stdio.h>
# include <stdarg.h>
2011-01-05 18:03:43 +03:00
# include <string.h>
2009-01-12 21:45:44 +03:00
# include <sys/types.h>
# include <sys/wait.h>
2011-01-05 18:03:43 +03:00
static int finished ( const char * cmd , int status ) {
2010-04-30 18:33:39 +04:00
if ( ! strcmp ( cmd , " not " ) )
return ! status ;
if ( ! strcmp ( cmd , " should " ) ) {
2010-05-12 09:55:42 +04:00
if ( status )
fprintf ( stderr , " TEST WARNING: Ignoring command failure. \n " ) ;
2010-04-30 18:33:39 +04:00
return 0 ;
}
return 6 ;
}
2009-01-12 21:45:44 +03:00
int main ( int args , char * * argv ) {
pid_t pid ;
int status ;
int FAILURE = 6 ;
if ( args < 2 ) {
fprintf ( stderr , " Need args \n " ) ;
return FAILURE ;
}
pid = fork ( ) ;
if ( pid = = - 1 ) {
fprintf ( stderr , " Could not fork \n " ) ;
return FAILURE ;
} else if ( pid = = 0 ) { /* child */
execvp ( argv [ 1 ] , & argv [ 1 ] ) ;
/* should not be accessible */
return FAILURE ;
} else { /* parent */
waitpid ( pid , & status , 0 ) ;
if ( ! WIFEXITED ( status ) ) {
2009-02-17 22:37:28 +03:00
if ( WIFSIGNALED ( status ) )
fprintf ( stderr ,
" Process %d died of signal %d. \n " ,
pid , WTERMSIG ( status ) ) ;
2009-01-12 21:45:44 +03:00
/* did not exit correctly */
return FAILURE ;
}
2010-04-30 18:33:39 +04:00
return finished ( argv [ 0 ] , WEXITSTATUS ( status ) ) ;
2009-01-12 21:45:44 +03:00
}
/* not accessible */
return FAILURE ;
}