sqlgettranslator.c

来自「一个可以替代windows ODBC驱动程序管理器的通用ODBC数据库引擎」· C语言 代码 · 共 191 行

C
191
字号
/* *  SQLGetTranslator.c * *  $Id: SQLGetTranslator.c,v 1.1 2001/06/07 00:48:50 source Exp $ * *  These functions intentionally left blank * *  The iODBC driver manager. * *  Copyright (C) 2001 by OpenLink Software <iodbc@openlinksw.com> * *  This library is free software; you can redistribute it and/or *  modify it under the terms of the GNU Library General Public *  License as published by the Free Software Foundation; either *  version 2 of the License, or (at your option) any later version. * *  This library is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *  Library General Public License for more details. * *  You should have received a copy of the GNU Library General Public *  License along with this library; if not, write to the Free *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <iodbc.h>#include <iodbcinst.h>#include "dlf.h"#include "inifile.h"#include "misc.h"#include "iodbc_error.h"#ifndef WIN32#include <unistd.h>#define CALL_CONFIG_TRANSLATOR(path) \	if ((handle = DLL_OPEN(path)) != NULL) \	{ \		if ((pConfigTranslator = (pConfigTranslatorFunc)DLL_PROC(handle, "ConfigTranslator")) != NULL) \		{ \	  	if (pConfigTranslator(hwndParent, pvOption)) \	  	{ \	    	DLL_CLOSE(handle); \	    	finish = retcode = TRUE; \	    	goto done; \	  	} \			else \			{ \				PUSH_ERROR(ODBC_ERROR_GENERAL_ERR); \	    	DLL_CLOSE(handle); \	    	retcode = FALSE; \	    	goto done; \			} \		} \		DLL_CLOSE(handle); \	}#endifextern SQLRETURN _iodbcdm_trschoose_dialbox(HWND, LPSTR, DWORD, int FAR*);BOOL INSTAPI GetTranslator (HWND hwndParent, LPSTR lpszName, WORD cbNameMax,    WORD FAR *pcbNameOut, LPSTR lpszPath, WORD cbPathMax,    WORD FAR *pcbPathOut, DWORD FAR *pvOption){  pConfigTranslatorFunc pConfigTranslator;  BOOL retcode = FALSE, finish = FALSE;  PCONFIG pCfg;  UWORD configMode;  RETCODE ret;  void *handle;  char translator[1024];  do    {      ret =	  _iodbcdm_trschoose_dialbox (hwndParent, translator,	  sizeof (translator), NULL);      if (ret == SQL_NO_DATA)	{	  if (pcbNameOut)	    *pcbNameOut = 0;	  if (pcbPathOut)	    *pcbPathOut = 0;	  finish = TRUE;	}      if (ret == SQL_SUCCESS)	{	  STRNCPY (lpszName, translator + STRLEN ("TranslationName="),	      cbNameMax - 1);	  if (pcbNameOut)	    *pcbNameOut = STRLEN (lpszName);	  /* Get it from the user odbcinst file */	  wSystemDSN = USERDSN_ONLY;	  if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE))	    {	      if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Setup"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	      if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Translator"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	      if (!access (lpszName, X_OK))		CALL_CONFIG_TRANSLATOR (lpszName);	      if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	      if (!_iodbcdm_cfg_find (pCfg, "Default", "Translator"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	    }	  /* Get it from the system odbcinst file */	  if (pCfg)	    {	      _iodbcdm_cfg_done (pCfg);	      pCfg = NULL;	    }	  wSystemDSN = SYSTEMDSN_ONLY;	  if (!_iodbcdm_cfg_search_init (&pCfg, "odbcinst.ini", TRUE))	    {	      if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Setup"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	      if (!_iodbcdm_cfg_find (pCfg, (char *) lpszName, "Translator"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	      if (!access (lpszName, X_OK))		CALL_CONFIG_TRANSLATOR (lpszName);	      if (!_iodbcdm_cfg_find (pCfg, "Default", "Setup"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	      if (!_iodbcdm_cfg_find (pCfg, "Default", "Translator"))		CALL_CONFIG_TRANSLATOR (pCfg->value);	    }	  /* The last ressort, a proxy driver */	  CALL_CONFIG_TRANSLATOR ("libtranslator.so");	  /* Error : ConfigDSN could no be found */	  PUSH_ERROR (ODBC_ERROR_LOAD_LIB_FAILED);	done:	  STRNCPY (lpszPath, pCfg->fileName, cbPathMax - 1);	  if (pcbPathOut)	    *pcbPathOut = STRLEN (lpszPath);	  _iodbcdm_cfg_done (pCfg);	}    }  while (!finish);  retcode = TRUE;quit:  wSystemDSN = USERDSN_ONLY;  configMode = ODBC_BOTH_DSN;  return retcode;}BOOL INSTAPISQLGetTranslator (    HWND hwnd,    LPSTR lpszName,    WORD cbNameMax,    WORD FAR * pcbNameOut,    LPSTR lpszPath,    WORD cbPathMax,    WORD FAR * pcbPathOut,    DWORD FAR * pvOption){  BOOL retcode = FALSE;  /* Check input parameters */  CLEAR_ERROR ();  if (!hwnd)    {      PUSH_ERROR (ODBC_ERROR_INVALID_HWND);      goto quit;    }  if (!lpszName || !lpszPath || cbNameMax < 1 || cbPathMax < 1)    {      PUSH_ERROR (ODBC_ERROR_INVALID_BUFF_LEN);      goto quit;    }  retcode = GetTranslator (hwnd, lpszName, cbNameMax, pcbNameOut, lpszPath,      cbPathMax, pcbPathOut, pvOption);quit:  return retcode;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?