| /* |
| * Copyright 1993, 1995 Christopher Seiwald. |
| * |
| * This file is part of Jam - see jam.c for Copyright information. |
| */ |
| |
| /* |
| * execcmd.h - execute a shell script. |
| * |
| * Defines the interface to be implemented in platform specific implementation |
| * modules as well as different shared utility functions prepared in the |
| * execcmd.c module. |
| */ |
| |
| #ifndef EXECCMD_H |
| #define EXECCMD_H |
| |
| #include "lists.h" |
| #include "strings.h" |
| #include "timestamp.h" |
| |
| |
| typedef struct timing_info |
| { |
| double system; |
| double user; |
| timestamp start; |
| timestamp end; |
| } timing_info; |
| |
| typedef void (* ExecCmdCallback) |
| ( |
| void * const closure, |
| int const status, |
| timing_info const * const, |
| char const * const cmd_stdout, |
| char const * const cmd_stderr, |
| int const cmd_exit_reason |
| ); |
| |
| /* Status codes passed to ExecCmdCallback routines. */ |
| #define EXEC_CMD_OK 0 |
| #define EXEC_CMD_FAIL 1 |
| #define EXEC_CMD_INTR 2 |
| |
| int exec_check |
| ( |
| string const * command, |
| LIST * * pShell, |
| int * error_length, |
| int * error_max_length |
| ); |
| |
| /* exec_check() return codes. */ |
| #define EXEC_CHECK_OK 101 |
| #define EXEC_CHECK_NOOP 102 |
| #define EXEC_CHECK_LINE_TOO_LONG 103 |
| #define EXEC_CHECK_TOO_LONG 104 |
| |
| void exec_cmd |
| ( |
| string const * command, |
| ExecCmdCallback func, |
| void * closure, |
| LIST * shell |
| ); |
| |
| void exec_wait(); |
| |
| |
| /****************************************************************************** |
| * * |
| * Utility functions defined in the execcmd.c module. * |
| * * |
| ******************************************************************************/ |
| |
| /* Constructs a list of command-line elements using the format specified by the |
| * given shell list. |
| */ |
| void argv_from_shell( char const * * argv, LIST * shell, char const * command, |
| int const slot ); |
| |
| /* Interrupt routine bumping the internal interrupt counter. Needs to be |
| * registered by platform specific exec*.c modules. |
| */ |
| void onintr( int disp ); |
| |
| /* Returns whether an interrupt has been detected so far. */ |
| int interrupted( void ); |
| |
| /* Checks whether the given shell list is actually a request to execute raw |
| * commands without an external shell. |
| */ |
| int is_raw_command_request( LIST * shell ); |
| |
| /* Utility worker for exec_check() checking whether all the given command lines |
| * are under the specified length limit. |
| */ |
| int check_cmd_for_too_long_lines( char const * command, int const max, |
| int * const error_length, int * const error_max_length ); |
| |
| #endif |