149 lines
4.8 KiB
C
149 lines
4.8 KiB
C
/************************************************************************
|
|
*
|
|
* util.h - Utility macros / prototypes for the runall utility
|
|
*
|
|
* $Id: util.h 588734 2007-10-26 18:17:55Z sebor $
|
|
*
|
|
************************************************************************
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* permissions and limitations under the License.
|
|
*
|
|
**************************************************************************/
|
|
|
|
#ifndef RW_UTIL_H
|
|
#define RW_UTIL_H
|
|
|
|
/**
|
|
Generates a non-terminal error message on stderr.
|
|
|
|
@param format printf () format string to display on stderr
|
|
*/
|
|
void warn (const char* const format, ...);
|
|
|
|
/**
|
|
Wrapper for exit (), providing a terminal error message on stderr.
|
|
|
|
@param state non-zero status code to exit () with
|
|
@param format printf () format string to display on stderr
|
|
*/
|
|
void terminate (const int state, const char* const format, ...);
|
|
|
|
/* Note: RW_MALLOC should be used rather than malloc within the runall
|
|
utility. This macro calls the guarded_malloc function which performs
|
|
validation on inputs and outputs. guarded_malloc shouldn't be called
|
|
directly, as it needs file and line information, provided by RW_MALLOC.
|
|
*/
|
|
|
|
#define RW_MALLOC(size) \
|
|
guarded_malloc(size, __FILE__, __LINE__)
|
|
/**
|
|
Wrapper for malloc (), providing return value checking.
|
|
|
|
@param size number of bytes of memory to allocate
|
|
@param file name of file calling method
|
|
@param line line number in file method was called from
|
|
@return (non-null) pointer to allocated bock of memory
|
|
*/
|
|
void* guarded_malloc (const size_t size, const char* const file,
|
|
const unsigned line);
|
|
|
|
#define RW_REALLOC(source, size) \
|
|
guarded_realloc(source, size, __FILE__, __LINE__)
|
|
/**
|
|
Wrapper for realloc(), providing return value checking.
|
|
|
|
@param source pointer to memory block to reallocate
|
|
@param size number of bytes of memory to allocate
|
|
@param file name of file calling method
|
|
@param line line number in file method was called from
|
|
@return (non-null) pointer to allocated bock of memory
|
|
*/
|
|
void* guarded_realloc (void* source, const size_t size,
|
|
const char* const file, const unsigned line);
|
|
|
|
/**
|
|
Generates the name of a reference (input/output) file.
|
|
|
|
This function allocates memory which is to be freed by the caller.
|
|
|
|
@param data_dir location of example data directory
|
|
@param subdir example subdirectory to reference
|
|
@param mode type of file to generate name for (should be 'in' or 'out')
|
|
@return translation of 'data_dir/subdir/mode/target_name.mode'
|
|
*/
|
|
char* reference_name (const char* data_dir, const char* subdir,
|
|
const char* mode);
|
|
|
|
/**
|
|
Composes the name of an input file, based on exec_name
|
|
|
|
Takes a data directory and an executable name, and tries to open an input
|
|
file based on these variables. If a file is found in neither of two
|
|
locattions derived from these variables, this method tries to fall back on
|
|
/dev/null.
|
|
|
|
Source file locations:
|
|
- [data_dir]/manual/in/[exec_name].in
|
|
- [data_dir]/tutorial/in/[exec_name].in
|
|
- /dev/null
|
|
|
|
@param data_dir the path of the reference data directory
|
|
@param exec_name the name of executable being run
|
|
@returns the name of the file
|
|
*/
|
|
char* input_name (const char* data_dir, const char* target);
|
|
|
|
|
|
/**
|
|
Generates the name of the output file for the executable target.
|
|
|
|
This function allocates memory which is to be freed by the caller.
|
|
|
|
@param path of target to generate output name for
|
|
@return translation of 'target.out'
|
|
*/
|
|
char* output_name (const char* target);
|
|
|
|
|
|
/**
|
|
Portability interface to sleep.
|
|
|
|
@param seconds the number of seconds to sleep
|
|
*/
|
|
void rw_sleep (int seconds);
|
|
|
|
|
|
/**
|
|
Portability interface to signal or sigaction.
|
|
|
|
@param signo signal number
|
|
@param func signal handler
|
|
@return 0 on success, -1 otherwise
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
int rw_signal (int signo, void (*func)(int));
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* RW_UTIL_H */
|