blob: ab145aa1d4e2e3f2453b13321b79fb1b6c32c02e [file] [log] [blame]
/*
* 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