diff options
Diffstat (limited to 'test/libelf/tset/common/elfts.h')
-rw-r--r-- | test/libelf/tset/common/elfts.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/test/libelf/tset/common/elfts.h b/test/libelf/tset/common/elfts.h new file mode 100644 index 0000000000000..b1632da831d67 --- /dev/null +++ b/test/libelf/tset/common/elfts.h @@ -0,0 +1,118 @@ +/*- + * Copyright (c) 2006,2010 Joseph Koshy + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: elfts.h 1337 2010-12-31 15:38:31Z jkoshy $ + */ + +#ifndef _ELF_TS_H_ +#define _ELF_TS_H_ 1 + +/* + * Common definitions used by test cases. + */ + +/* Invocable component requires elf_version() to be set. */ +#define IC_REQUIRES_VERSION_INIT() \ + extern int elfts_tcinit; \ + void (*tet_startup)(void) = elfts_init_version + +/* Test purpose needs to check for initialization success */ +#define TP_CHECK_INITIALIZATION() do { \ + if (elfts_tcinit != TET_PASS) { \ + tet_infoline("unresolved: test case setup " \ + "failed."); \ + tet_result(elfts_tcinit); \ + return; \ + } \ + } while (0) + +/* Treat a memory area as containing ELF data */ +#define TS_OPEN_MEMORY(E,M) do { \ + if (((E) = elf_memory((M), sizeof((M)))) == NULL) { \ + tet_infoline("unresolved: elf_memory() " \ + "failed."); \ + tet_result(TET_UNRESOLVED); \ + return; \ + } \ + } while (0) + +/* Get an ELF descriptor for a file */ +#define _TS_OPEN_FILE(E,FN,CMD,FD,ACTION) do { \ + if (((E) = elfts_open_file((FN),(CMD),&(FD))) == NULL) \ + ACTION \ + } while (0) + +#define TS_OPEN_FILE(E,FN,CMD,FD) _TS_OPEN_FILE(E,FN,CMD,FD,return;) + +#define _TS_WRITE_FILE(FN,DATA,DSZ,ACTION) do { \ + int _fd; \ + if ((_fd = open((FN), O_CREAT|O_WRONLY, 0666)) < 0) { \ + tet_printf("unresolved: open("FN") failed: %s.",\ + strerror(errno)); \ + ACTION \ + } \ + if (write(_fd, (DATA), (DSZ)) != (DSZ)) { \ + tet_printf("unresolved: write("FN") failed: %s.",\ + strerror(errno)); \ + ACTION \ + } \ + (void) close(_fd); \ + } while (0) + +#define _TS_READ_FILE(FN,DATA,DSZ,ACTION) do { \ + int _fd; \ + size_t _rsz, _sz; \ + struct stat _sb; \ + if ((_fd = open((FN), O_RDONLY, 0)) < 0) { \ + tet_printf("unresolved: open("FN") failed: %s.", \ + strerror(errno)); \ + ACTION \ + } \ + if (fstat(_fd, &_sb) < 0) { \ + tet_printf("unresolved: fstat("FN") failed: %s.", \ + strerror(errno)); \ + ACTION \ + } \ + if ((DSZ) < _sb.st_size) \ + _sz = (DSZ); \ + else \ + _sz = _sb.st_size; \ + if ((_rsz = read(_fd, (DATA), _sz)) != _sz) { \ + tet_printf("unresolved: read("FN") failed: %s.", \ + strerror(errno)); \ + ACTION \ + } \ + (void) close(_fd); \ + } while (0) + +#define TS_NEWFILE "new.file" + +void elfts_init_version(void); + +Elf *elfts_open_file(const char *_fn, Elf_Cmd _cmd, int *_fdp); +int elfts_compare_files(const char *_reffn, const char *fn); +char *elfts_copy_file(const char *_fn, int *_error); + +#endif /* _LIBELF_TS_H_ */ |