18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * you may not use this file except in compliance with the License.
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * You may obtain a copy of the License at
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * See the License for the specific language governing permissions and
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * limitations under the License.
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* this file is used to test that we can use libesd with lazy dynamic linking */
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <esd.h>
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <dlfcn.h>
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <stdio.h>
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  D(...)  fprintf(stderr,__VA_ARGS__)
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  STRINGIFY(x)  _STRINGIFY(x)
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _STRINGIFY(x)  #x
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  ESD_SYMBOLS   \
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ESD_FUNCTION(int,esd_play_stream,(esd_format_t,int,const char*,const char*))   \
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ESD_FUNCTION(int,esd_record_stream,(esd_format_t,int,const char*,const char*)) \
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ESD_FUNCTION(int,esd_open_sound,( const char *host )) \
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ESD_FUNCTION(int,esd_close,(int)) \
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* define pointers to library functions we're going to use */
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  ESD_FUNCTION(ret,name,sig)   \
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    static ret  (*func_ ## name)sig;
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectESD_SYMBOLS
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef  ESD_FUNCTION
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstatic void*    esd_lib;
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
41c005246ed03de874fdc432073ba8e5e8ebfed922David 'Digit' Turnerint main( void )
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project{
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int  fd;
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    esd_lib = dlopen( "libesd.so", RTLD_NOW );
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (esd_lib == NULL)
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        esd_lib = dlopen( "libesd.so.0", RTLD_NOW );
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    if (esd_lib == NULL) {
5080bc5c8c7b9c50e8f302c22c2fba42dd6e8aa2dfDavid 'Digit' Turner        D("could not find libesd on this system\n");
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        return 1;
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    }
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#undef  ESD_FUNCTION
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ESD_FUNCTION(ret,name,sig)                                               \
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    do {                                                                         \
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        (func_ ##name) = dlsym( esd_lib, STRINGIFY(name) );                      \
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        if ((func_##name) == NULL) {                                             \
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            D("could not find %s in libesd\n", STRINGIFY(name));   \
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project            return 1;                                               \
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        }                                                                        \
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } while (0);
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    ESD_SYMBOLS
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    return 0;
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}
68