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