cannam@125: /* cannam@125: ** Copyright (C) 2006-2014 Erik de Castro Lopo cannam@125: ** cannam@125: ** This program is free software; you can redistribute it and/or modify cannam@125: ** it under the terms of the GNU General Public License as published by cannam@125: ** the Free Software Foundation; either version 2 of the License, or cannam@125: ** (at your option) any later version. cannam@125: ** cannam@125: ** This program is distributed in the hope that it will be useful, cannam@125: ** but WITHOUT ANY WARRANTY; without even the implied warranty of cannam@125: ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the cannam@125: ** GNU General Public License for more details. cannam@125: ** cannam@125: ** You should have received a copy of the GNU General Public License cannam@125: ** along with this program; if not, write to the Free Software cannam@125: ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. cannam@125: */ cannam@125: cannam@125: #include "sfconfig.h" cannam@125: cannam@125: #include cannam@125: #include cannam@125: cannam@125: #if HAVE_UNISTD_H cannam@125: #include cannam@125: #endif cannam@125: cannam@125: #if (HAVE_DECL_S_IRGRP == 0) cannam@125: #include cannam@125: #endif cannam@125: cannam@125: #include cannam@125: #include cannam@125: #include cannam@125: cannam@125: #include "utils.h" cannam@125: cannam@125: #if (defined (WIN32) || defined (_WIN32) || defined (__CYGWIN__)) cannam@125: #define TEST_WIN32 1 cannam@125: #else cannam@125: #define TEST_WIN32 0 cannam@125: #endif cannam@125: cannam@125: #if TEST_WIN32 cannam@125: #include cannam@125: cannam@125: cannam@125: static const char * locations [] = cannam@125: { ".", "../src/", "src/", "../src/.libs/", "src/.libs/", cannam@125: NULL cannam@125: } ; /* locations. */ cannam@125: cannam@125: static int cannam@125: test_ordinal (HMODULE hmod, const char * func_name, int ordinal) cannam@125: { char *lpmsg ; cannam@125: void *name, *ord ; cannam@125: cannam@125: print_test_name ("win32_ordinal_test", func_name) ; cannam@125: cannam@125: #if SIZEOF_VOIDP == 8 cannam@125: #define LPCSTR_OF_ORDINAL(x) ((LPCSTR) ((int64_t) (x))) cannam@125: #else cannam@125: #define LPCSTR_OF_ORDINAL(x) ((LPCSTR) (x)) cannam@125: #endif cannam@125: cannam@125: ord = GetProcAddress (hmod, LPCSTR_OF_ORDINAL (ordinal)) ; cannam@125: if ((name = GetProcAddress (hmod, func_name)) == NULL) cannam@125: { FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError (), cannam@125: MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpmsg, 0, NULL) ; cannam@125: /*-puts (lpmsg) ;-*/ cannam@125: } ; cannam@125: cannam@125: if (name != NULL && ord != NULL && name == ord) cannam@125: { puts ("ok") ; cannam@125: return 0 ; cannam@125: } ; cannam@125: cannam@125: puts ("fail") ; cannam@125: return 1 ; cannam@125: } /* test_ordinal */ cannam@125: cannam@125: static void cannam@125: win32_ordinal_test (void) cannam@125: { static char buffer [1024] ; cannam@125: static char func_name [1024] ; cannam@125: HMODULE hmod = NULL ; cannam@125: FILE * file = NULL ; cannam@125: int k, ordinal, errors = 0 ; cannam@125: cannam@125: for (k = 0 ; locations [k] != NULL ; k++) cannam@125: { snprintf (buffer, sizeof (buffer), "%s/libsndfile-1.def", locations [k]) ; cannam@125: if ((file = fopen (buffer, "r")) != NULL) cannam@125: break ; cannam@125: } ; cannam@125: cannam@125: if (file == NULL) cannam@125: { puts ("\n\nError : cannot open DEF file.\n") ; cannam@125: exit (1) ; cannam@125: } ; cannam@125: cannam@125: for (k = 0 ; locations [k] != NULL ; k++) cannam@125: { snprintf (buffer, sizeof (buffer), "%s/libsndfile-1.dll", locations [k]) ; cannam@125: if ((hmod = (HMODULE) LoadLibrary (buffer)) != NULL) cannam@125: break ; cannam@125: } ; cannam@125: cannam@125: if (hmod == NULL) cannam@125: { printf ("\n\nError : cannot load DLL (cwd is %s).\n", getcwd (buffer, sizeof (buffer))) ; cannam@125: exit (1) ; cannam@125: } ; cannam@125: cannam@125: while (fgets (buffer, sizeof (buffer), file) != NULL) cannam@125: { func_name [0] = 0 ; cannam@125: ordinal = 0 ; cannam@125: cannam@125: if (sscanf (buffer, "%s @%d", func_name, &ordinal) != 2) cannam@125: continue ; cannam@125: cannam@125: errors += test_ordinal (hmod, func_name, ordinal) ; cannam@125: } ; cannam@125: cannam@125: FreeLibrary (hmod) ; cannam@125: cannam@125: fclose (file) ; cannam@125: cannam@125: if (errors > 0) cannam@125: { printf ("\n\nErrors : %d\n\n", errors) ; cannam@125: exit (1) ; cannam@125: } ; cannam@125: cannam@125: return ; cannam@125: } /* win32_ordinal_test */ cannam@125: cannam@125: #endif cannam@125: cannam@125: int cannam@125: main (void) cannam@125: { cannam@125: #if (TEST_WIN32 && WIN32_TARGET_DLL) cannam@125: win32_ordinal_test () ; cannam@125: #endif cannam@125: cannam@125: return 0 ; cannam@125: } /* main */ cannam@125: