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 + -
显示快捷键?