Example #1
0
static int __crystax_vlogcat(int prio, const char *tag, const char *fmt, va_list ap)
{
    if (__crystax_atomic_fetch(&initialized) == 0)
    {
        void *pc;
        void *pf;

        pc = dlopen("liblog.so", RTLD_NOW);
        if (!pc) abort();

        pf = dlsym(pc, "__android_log_vprint");
        if (!pf) abort();

        __crystax_atomic_swap((void*)&func_android_log_vprint, pf);
        __crystax_atomic_swap(&initialized, 1);
    }
    return func_android_log_vprint(prio, tag, fmt, ap);
}
Example #2
0
int pthread_mutex_timedlock(pthread_mutex_t *mutex, const struct timespec *abstime)
{
    if (!mutex)
        abort();

    if (__crystax_atomic_fetch(&initialized) == 0)
    {
        bionic_pthread_mutex_timedlock = __crystax_bionic_symbol(__CRYSTAX_BIONIC_SYMBOL_PTHREAD_MUTEX_TIMEDLOCK, 1);
        bionic_pthread_mutex_lock_timeout_np = __crystax_bionic_symbol(__CRYSTAX_BIONIC_SYMBOL_PTHREAD_MUTEX_LOCK_TIMEOUT_NP, 1);

        __crystax_atomic_swap(&initialized, 1);
    }

    if (bionic_pthread_mutex_timedlock)
        return bionic_pthread_mutex_timedlock(mutex, abstime);
    else if (bionic_pthread_mutex_lock_timeout_np)
        return crystax_pthread_mutex_timedlock(mutex, abstime);
    else
        return EFAULT;
}