dllcheck.c revision 3f54fd611f536639ec30dd53c48e5ec1897cc7d9
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu/***********************************************************************
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* This software is part of the ast package *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* Copyright (c) 1997-2012 AT&T Intellectual Property *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* and is licensed under the *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* Eclipse Public License, Version 1.0 *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* by AT&T Intellectual Property *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* A copy of the License is available at *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* http://www.eclipse.org/org/documents/epl-v10.html *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* Information and Software Systems Research *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* AT&T Research *
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu* Florham Park NJ *
69b1e90bbb27ce2dd365628c07c0f03a3ae97b26Robert Savu* Glenn Fowler <gsf@research.att.com> *
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulz***********************************************************************/
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu * Glenn Fowler
37dd4c99dbe470cce3fe0d89a011186f080e8910Robert Savu * AT&T Research
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu * return plugin version for dll
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulz * 0 if there is none
ad306df140215d8fb88d14bbb7d685011e0f770bRobert Savu * path!=0 enables library level diagnostics
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulzextern unsigned long
ad2e68e571352b6759441733df697e075ceed341Robert Savu if (pvf = (Dll_plugin_version_f)dlllook(dll, "plugin_version"))
ad2e68e571352b6759441733df697e075ceed341Robert Savu return (*pvf)();
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu sfsprintf(state.errorbuf, sizeof(state.errorbuf), "plugin_version() not found");
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu errorf("dll", NiL, 1, "dllversion: %s: %s", path, state.errorbuf);
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu * check if dll on path has plugin version >= ver
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu * 1 returned on success, 0 on failure
ad306df140215d8fb88d14bbb7d685011e0f770bRobert Savu * path!=0 enables library level diagnostics
ad306df140215d8fb88d14bbb7d685011e0f770bRobert Savu * cur!=0 gets actual version
ad2e68e571352b6759441733df697e075ceed341Robert Savudllcheck(void* dll, const char* path, unsigned long ver, unsigned long* cur)
b3df7e69d4d6066fdfae0a8a2f3b4a161eaaf540Robert Savu unsigned long v;
239330cd665aac95fcf9cf95449594c96667cbc2Robert Savu sfsprintf(state.errorbuf, sizeof(state.errorbuf), "plugin version %lu older than caller %lu", v, ver);
ad2e68e571352b6759441733df697e075ceed341Robert Savu errorf("dll", NiL, 1, "dllcheck: %s: %s", path, state.errorbuf);
0a03acf9fa28e6ff00f4d7c9c6acbae64cf09c56Ewaryst Schulz errorf("dll", NiL, -1, "dllversion: %s: %lu >= %lu", path, v, ver);