dvander@353: /* dvander@353: * BinReloc - a library for creating relocatable executables dvander@353: * Written by: Hongli Lai dvander@353: * http://autopackage.org/ dvander@353: * dvander@353: * This source code is public domain. You can relicense this code dvander@353: * under whatever license you want. dvander@353: * dvander@353: * See http://autopackage.org/docs/binreloc/ for dvander@353: * more information and how to use this. dvander@353: */ dvander@353: dvander@353: #ifndef __BINRELOC_H__ dvander@353: #define __BINRELOC_H__ dvander@353: dvander@353: #ifdef __cplusplus dvander@353: extern "C" { dvander@353: #endif /* __cplusplus */ dvander@353: dvander@353: dvander@353: /** These error codes can be returned by br_init(), br_init_lib(), gbr_init() or gbr_init_lib(). */ dvander@353: typedef enum { dvander@353: /** Cannot allocate memory. */ dvander@353: BR_INIT_ERROR_NOMEM, dvander@353: /** Unable to open /proc/self/maps; see errno for details. */ dvander@353: BR_INIT_ERROR_OPEN_MAPS, dvander@353: /** Unable to read from /proc/self/maps; see errno for details. */ dvander@353: BR_INIT_ERROR_READ_MAPS, dvander@353: /** The file format of /proc/self/maps is invalid; kernel bug? */ dvander@353: BR_INIT_ERROR_INVALID_MAPS, dvander@353: /** BinReloc is disabled (the ENABLE_BINRELOC macro is not defined). */ dvander@353: BR_INIT_ERROR_DISABLED dvander@353: } BrInitError; dvander@353: dvander@353: dvander@353: #ifndef BINRELOC_RUNNING_DOXYGEN dvander@353: /* Mangle symbol names to avoid symbol collisions with other ELF objects. */ dvander@353: #define br_init SbCJ22537442193159_br_init dvander@353: #define br_init_lib SbCJ22537442193159_br_init_lib dvander@353: #define br_find_exe SbCJ22537442193159_br_find_exe dvander@353: #define br_find_exe_dir SbCJ22537442193159_br_find_exe_dir dvander@353: #define br_find_prefix SbCJ22537442193159_br_find_prefix dvander@353: #define br_find_bin_dir SbCJ22537442193159_br_find_bin_dir dvander@353: #define br_find_sbin_dir SbCJ22537442193159_br_find_sbin_dir dvander@353: #define br_find_data_dir SbCJ22537442193159_br_find_data_dir dvander@353: #define br_find_locale_dir SbCJ22537442193159_br_find_locale_dir dvander@353: #define br_find_lib_dir SbCJ22537442193159_br_find_lib_dir dvander@353: #define br_find_libexec_dir SbCJ22537442193159_br_find_libexec_dir dvander@353: #define br_find_etc_dir SbCJ22537442193159_br_find_etc_dir dvander@353: #define br_strcat SbCJ22537442193159_br_strcat dvander@353: #define br_build_path SbCJ22537442193159_br_build_path dvander@353: #define br_dirname SbCJ22537442193159_br_dirname dvander@353: dvander@353: dvander@353: #endif dvander@353: int br_init (BrInitError *error); dvander@353: int br_init_lib (BrInitError *error); dvander@353: dvander@353: char *br_find_exe (const char *default_exe); dvander@353: char *br_find_exe_dir (const char *default_dir); dvander@353: char *br_find_prefix (const char *default_prefix); dvander@353: char *br_find_bin_dir (const char *default_bin_dir); dvander@353: char *br_find_sbin_dir (const char *default_sbin_dir); dvander@353: char *br_find_data_dir (const char *default_data_dir); dvander@353: char *br_find_locale_dir (const char *default_locale_dir); dvander@353: char *br_find_lib_dir (const char *default_lib_dir); dvander@353: char *br_find_libexec_dir (const char *default_libexec_dir); dvander@353: char *br_find_etc_dir (const char *default_etc_dir); dvander@353: dvander@353: /* Utility functions */ dvander@353: char *br_strcat (const char *str1, const char *str2); dvander@353: char *br_build_path (const char *dir, const char *file); dvander@353: char *br_dirname (const char *path); dvander@353: dvander@353: dvander@353: #ifdef __cplusplus dvander@353: } dvander@353: #endif /* __cplusplus */ dvander@353: dvander@353: #endif /* __BINRELOC_H__ */