X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=common%2Fcommon.h;h=bd5a6d64fb38f75ed78b9def5151be714255db4f;hb=6b977cdc115af3cebdf488f27d106788e8bd9461;hp=7a176a421a8c252671105f6958e81651d7621b95;hpb=43cbaab1fc66139d3dfd87a2f8b6be5d906ee317;p=apps%2Fpfixtools.git diff --git a/common/common.h b/common/common.h index 7a176a4..bd5a6d6 100644 --- a/common/common.h +++ b/common/common.h @@ -16,17 +16,20 @@ /* products derived from this software without specific prior written */ /* permission. */ /* */ -/* THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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. */ +/* THIS SOFTWARE IS PROVIDED BY THE 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 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. */ +/* */ +/* Copyright (c) 2006-2008 the Authors */ +/* see AUTHORS and source files for details */ /******************************************************************************/ /* @@ -63,11 +66,23 @@ typedef int (*initcall_t)(void); typedef void (*exitcall_t)(void); -#define __init __attribute__((__used__,__section__("MAD_INIT,__text,regular"))) -#define __exit __attribute__((__used__,__section__("MAD_EXIT,__text,regular"))) +void common_register_exit(exitcall_t exitcall); +void common_init(void); -#define module_init(fn) static __init initcall_t __init_##fn = fn; -#define module_exit(fn) static __exit exitcall_t __exit_##fn = fn; +#define module_init(fn) \ + __attribute__((constructor,used)) \ + static void __init_wrapper__ ## fn (void) { \ + common_init(); \ + if (fn() != 0) { \ + exit(-1); \ + } \ + } +#define module_exit(fn) \ + __attribute__((constructor,used)) \ + static void __exit_wrapper ## fn(void) { \ + common_init(); \ + common_register_exit(fn); \ + } #define likely(expr) __builtin_expect((expr) != 0, 1) #define unlikely(expr) __builtin_expect((expr) != 0, 0) @@ -82,14 +97,14 @@ typedef void (*exitcall_t)(void); : (L) == LOG_ALERT ? "alert " \ : "??? " ) -#define __log(Level, Fmt, ...) \ - if (log_level >= Level) { \ - if (log_syslog) { \ - syslog(Level, Fmt, ##__VA_ARGS__); \ - } else { \ - fprintf(stderr, "[%s] " Fmt "\n", \ - __level_name(Level), ##__VA_ARGS__); \ - } \ +#define __log(Level, Fmt, ...) \ + if (log_level >= Level) { \ + if (log_syslog) { \ + syslog(Level, "%s" Fmt, log_state, ##__VA_ARGS__); \ + } else { \ + fprintf(stderr, "[%s] %s" Fmt "\n", \ + __level_name(Level), log_state, ##__VA_ARGS__);\ + } \ } #define debug(Fmt, ...) __log(LOG_DEBUG, Fmt, ##__VA_ARGS__) @@ -106,6 +121,7 @@ typedef void (*exitcall_t)(void); extern int log_level; extern bool log_syslog; +extern const char *log_state; void common_sighandler(int sig);