<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.12"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>FreeTDS API: Configuration</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/searchdata.js"></script> <script type="text/javascript" src="search/search.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">FreeTDS API </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.12 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> $(function() { initMenu('',true,false,'search.php','Search'); $(document).ready(function() { init_search(); }); }); </script> <div id="main-nav"></div> </div><!-- top --> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> </div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <div class="header"> <div class="summary"> <a href="#nested-classes">Classes</a> | <a href="#define-members">Macros</a> | <a href="#func-members">Functions</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <div class="title">Configuration<div class="ingroups"><a class="el" href="a00537.html">LibTDS API</a></div></div> </div> </div><!--header--> <div class="contents"> <p>Handle reading of configuration. <a href="#details">More...</a></p> <div class="dynheader"> Collaboration diagram for Configuration:</div> <div class="dyncontent"> <center><table><tr><td><div class="center"><iframe scrolling="no" frameborder="0" src="a00529.svg" width="260" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </div> </td></tr></table></center> </div> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> Classes</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="a00713.html">tdsvername_t</a></td></tr> <tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> Macros</h2></td></tr> <tr class="memitem:gacc70f24c323b7177050339e069a90c56"><td class="memItemLeft" align="right" valign="top"><a id="gacc70f24c323b7177050339e069a90c56"></a> #define </td><td class="memItemRight" valign="bottom"><b>TDS_FIND</b>(k, b, c)   tds_find(k, b, sizeof(b)/sizeof(b[0]), sizeof(b[0]), c)</td></tr> <tr class="separator:gacc70f24c323b7177050339e069a90c56"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:ga369c1a907b111eef229a3e679c914281"><td class="memItemLeft" align="right" valign="top"><a id="ga369c1a907b111eef229a3e679c914281"></a> static int </td><td class="memItemRight" valign="bottom"><b>hex2num</b> (char *hex)</td></tr> <tr class="separator:ga369c1a907b111eef229a3e679c914281"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga9f90139b7fd8ac8a1b7ec774513786a1"><td class="memItemLeft" align="right" valign="top"><a id="ga9f90139b7fd8ac8a1b7ec774513786a1"></a> static int </td><td class="memItemRight" valign="bottom"><b>hexdigit</b> (int c)</td></tr> <tr class="separator:ga9f90139b7fd8ac8a1b7ec774513786a1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa9670914093b354e7a123b10ba877813"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#gaa9670914093b354e7a123b10ba877813">parse_server_name_for_port</a> (<a class="el" href="a01101.html">TDSLOGIN</a> *connection, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="memdesc:gaa9670914093b354e7a123b10ba877813"><td class="mdescLeft"> </td><td class="mdescRight">Check the server name to find port info first Warning: connection-> & login-> are all modified when needed. <a href="#gaa9670914093b354e7a123b10ba877813">More...</a><br /></td></tr> <tr class="separator:gaa9670914093b354e7a123b10ba877813"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaca20b6e5f5a5ac1727126712dd39564b"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#gaca20b6e5f5a5ac1727126712dd39564b">search_interface_file</a> (<a class="el" href="a01101.html">TDSLOGIN</a> *login, const char *dir, const char *file, const char *host)</td></tr> <tr class="memdesc:gaca20b6e5f5a5ac1727126712dd39564b"><td class="mdescLeft"> </td><td class="mdescRight">Open and read the file 'file' searching for a logical server by the name of 'host'. <a href="#gaca20b6e5f5a5ac1727126712dd39564b">More...</a><br /></td></tr> <tr class="separator:gaca20b6e5f5a5ac1727126712dd39564b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa3e087e2df44398cbb4741584d2b4f8e"><td class="memItemLeft" align="right" valign="top"><a id="gaa3e087e2df44398cbb4741584d2b4f8e"></a> int </td><td class="memItemRight" valign="bottom"><b>tds_config_boolean</b> (const char *option, const char *value, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:gaa3e087e2df44398cbb4741584d2b4f8e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga409ea4515b5424920b8371295cebaa48"><td class="memItemLeft" align="right" valign="top"><a id="ga409ea4515b5424920b8371295cebaa48"></a> static void </td><td class="memItemRight" valign="bottom"><b>tds_config_encryption</b> (const char *value, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:ga409ea4515b5424920b8371295cebaa48"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga86080f29fb8f43acebbfbb355a4f4874"><td class="memItemLeft" align="right" valign="top"><a id="ga86080f29fb8f43acebbfbb355a4f4874"></a> static int </td><td class="memItemRight" valign="bottom"><b>tds_config_env_tdsdump</b> (<a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:ga86080f29fb8f43acebbfbb355a4f4874"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gac598ca7c689d62d1535874f40132cc44"><td class="memItemLeft" align="right" valign="top"><a id="gac598ca7c689d62d1535874f40132cc44"></a> static int </td><td class="memItemRight" valign="bottom"><b>tds_config_env_tdshost</b> (<a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:gac598ca7c689d62d1535874f40132cc44"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga9d076eb297543cb61e07cabd4220d540"><td class="memItemLeft" align="right" valign="top"><a id="ga9d076eb297543cb61e07cabd4220d540"></a> static void </td><td class="memItemRight" valign="bottom"><b>tds_config_env_tdsport</b> (<a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:ga9d076eb297543cb61e07cabd4220d540"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga6d870fe4597d567aac9c4464b04a3c54"><td class="memItemLeft" align="right" valign="top"><a id="ga6d870fe4597d567aac9c4464b04a3c54"></a> static void </td><td class="memItemRight" valign="bottom"><b>tds_config_env_tdsver</b> (<a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:ga6d870fe4597d567aac9c4464b04a3c54"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga8db0faf6db365134a553cc4b43b420e5"><td class="memItemLeft" align="right" valign="top"><a id="ga8db0faf6db365134a553cc4b43b420e5"></a> static int </td><td class="memItemRight" valign="bottom"><b>tds_config_login</b> (<a class="el" href="a01101.html">TDSLOGIN</a> *connection, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:ga8db0faf6db365134a553cc4b43b420e5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gade94d7e89ba1f668c82be0b00a7f5cd7"><td class="memItemLeft" align="right" valign="top">TDS_USMALLINT * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#gade94d7e89ba1f668c82be0b00a7f5cd7">tds_config_verstr</a> (const char *tdsver, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="memdesc:gade94d7e89ba1f668c82be0b00a7f5cd7"><td class="mdescLeft"> </td><td class="mdescRight">Set TDS version from given string. <a href="#gade94d7e89ba1f668c82be0b00a7f5cd7">More...</a><br /></td></tr> <tr class="separator:gade94d7e89ba1f668c82be0b00a7f5cd7"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gabcc0322da1a1d9b47ee4c22aa1d61778"><td class="memItemLeft" align="right" valign="top"><a id="gabcc0322da1a1d9b47ee4c22aa1d61778"></a> static void * </td><td class="memItemRight" valign="bottom"><b>tds_find</b> (const void *key, const void *base, size_t nelem, size_t width, int(*compar)(const void *, const void *))</td></tr> <tr class="separator:gabcc0322da1a1d9b47ee4c22aa1d61778"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gacee4f06ba749b10ee9f2e5bb1c4a8910"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#gacee4f06ba749b10ee9f2e5bb1c4a8910">tds_fix_login</a> (<a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="memdesc:gacee4f06ba749b10ee9f2e5bb1c4a8910"><td class="mdescLeft"> </td><td class="mdescRight">Fix configuration after reading it. <a href="#gacee4f06ba749b10ee9f2e5bb1c4a8910">More...</a><br /></td></tr> <tr class="separator:gacee4f06ba749b10ee9f2e5bb1c4a8910"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga860690ac47a80f74c83b25cbd8d7703d"><td class="memItemLeft" align="right" valign="top"><a id="ga860690ac47a80f74c83b25cbd8d7703d"></a> const <a class="el" href="a00434.html#ab30e42bf2bf063932ecd1a8212f617f0">TDS_COMPILETIME_SETTINGS</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#ga860690ac47a80f74c83b25cbd8d7703d">tds_get_compiletime_settings</a> (void)</td></tr> <tr class="memdesc:ga860690ac47a80f74c83b25cbd8d7703d"><td class="mdescLeft"> </td><td class="mdescRight">Return a structure capturing the compile-time settings provided to the configure script. <br /></td></tr> <tr class="separator:ga860690ac47a80f74c83b25cbd8d7703d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaf49eca946d1b2457e189de7207e3670c"><td class="memItemLeft" align="right" valign="top">static char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#gaf49eca946d1b2457e189de7207e3670c">tds_get_home_file</a> (const char *file)</td></tr> <tr class="memdesc:gaf49eca946d1b2457e189de7207e3670c"><td class="mdescLeft"> </td><td class="mdescRight">Return filename from HOME directory. <a href="#gaf49eca946d1b2457e189de7207e3670c">More...</a><br /></td></tr> <tr class="separator:gaf49eca946d1b2457e189de7207e3670c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa17936ef93e1c68833c4aab769bd90d9"><td class="memItemLeft" align="right" valign="top">struct addrinfo * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#gaa17936ef93e1c68833c4aab769bd90d9">tds_lookup_host</a> (const char *servername)</td></tr> <tr class="memdesc:gaa17936ef93e1c68833c4aab769bd90d9"><td class="mdescLeft"> </td><td class="mdescRight">Get the IP address for a hostname. <a href="#gaa17936ef93e1c68833c4aab769bd90d9">More...</a><br /></td></tr> <tr class="separator:gaa17936ef93e1c68833c4aab769bd90d9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga15536d5f0812e156705ed168f5b56b35"><td class="memItemLeft" align="right" valign="top"><a id="ga15536d5f0812e156705ed168f5b56b35"></a> TDSRET </td><td class="memItemRight" valign="bottom"><b>tds_lookup_host_set</b> (const char *servername, struct addrinfo **addr)</td></tr> <tr class="separator:ga15536d5f0812e156705ed168f5b56b35"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga45281d1cb2ac649db65d80bb3ff06b66"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#ga45281d1cb2ac649db65d80bb3ff06b66">tds_lookup_port</a> (const char *portname)</td></tr> <tr class="memdesc:ga45281d1cb2ac649db65d80bb3ff06b66"><td class="mdescLeft"> </td><td class="mdescRight">Given a portname lookup the port. <a href="#ga45281d1cb2ac649db65d80bb3ff06b66">More...</a><br /></td></tr> <tr class="separator:ga45281d1cb2ac649db65d80bb3ff06b66"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa786931199373e617afbf7198e251ce8"><td class="memItemLeft" align="right" valign="top"><a id="gaa786931199373e617afbf7198e251ce8"></a> int </td><td class="memItemRight" valign="bottom"><b>tds_parse_boolean</b> (const char *value, int default_value)</td></tr> <tr class="separator:gaa786931199373e617afbf7198e251ce8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga3e63911fa1b576b353452295be13765a"><td class="memItemLeft" align="right" valign="top"><a id="ga3e63911fa1b576b353452295be13765a"></a> void </td><td class="memItemRight" valign="bottom"><b>tds_parse_conf_section</b> (const char *option, const char *value, void *param)</td></tr> <tr class="separator:ga3e63911fa1b576b353452295be13765a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga0a63cb612f245fd85e56cfea98ff8f3b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#ga0a63cb612f245fd85e56cfea98ff8f3b">tds_read_conf_file</a> (<a class="el" href="a01101.html">TDSLOGIN</a> *login, const char *server)</td></tr> <tr class="memdesc:ga0a63cb612f245fd85e56cfea98ff8f3b"><td class="mdescLeft"> </td><td class="mdescRight">Read configuration info for given server return 0 on error. <a href="#ga0a63cb612f245fd85e56cfea98ff8f3b">More...</a><br /></td></tr> <tr class="separator:ga0a63cb612f245fd85e56cfea98ff8f3b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga6580a3a0a6063c8095a3c4405061e068"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#ga6580a3a0a6063c8095a3c4405061e068">tds_read_conf_section</a> (FILE *in, const char *section, TDSCONFPARSE tds_conf_parse, void *param)</td></tr> <tr class="memdesc:ga6580a3a0a6063c8095a3c4405061e068"><td class="mdescLeft"> </td><td class="mdescRight">Read a section of configuration file (INI style file) <a href="#ga6580a3a0a6063c8095a3c4405061e068">More...</a><br /></td></tr> <tr class="separator:ga6580a3a0a6063c8095a3c4405061e068"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gaa89225d6a3d1fcc1c40e8ea747f46f1f"><td class="memItemLeft" align="right" valign="top"><a id="gaa89225d6a3d1fcc1c40e8ea747f46f1f"></a> static int </td><td class="memItemRight" valign="bottom"><b>tds_read_conf_sections</b> (FILE *in, const char *server, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:gaa89225d6a3d1fcc1c40e8ea747f46f1f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga9af192306186ddf39e09be0fd4ad8aaf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a01101.html">TDSLOGIN</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#ga9af192306186ddf39e09be0fd4ad8aaf">tds_read_config_info</a> (<a class="el" href="a01193.html">TDSSOCKET</a> *tds, <a class="el" href="a01101.html">TDSLOGIN</a> *login, <a class="el" href="a01109.html">TDSLOCALE</a> *locale)</td></tr> <tr class="memdesc:ga9af192306186ddf39e09be0fd4ad8aaf"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="a00529.html#ga9af192306186ddf39e09be0fd4ad8aaf" title="tds_read_config_info() will fill the tds connection structure based on configuration information gath...">tds_read_config_info()</a> will fill the tds connection structure based on configuration information gathered in the following order: 1) Program specified in TDSLOGIN structure 2) The environment variables TDSVER, TDSDUMP, TDSPORT, TDSQUERY, TDSHOST 3) A config file with the following search order: a) a readable file specified by environment variable FREETDSCONF b) a readable file in ~/.freetds.conf c) a readable file in $prefix/etc/freetds.conf 3) ~/.interfaces if exists 4) $SYBASE/interfaces if exists 5) TDS_DEF_* default values <a href="#ga9af192306186ddf39e09be0fd4ad8aaf">More...</a><br /></td></tr> <tr class="separator:ga9af192306186ddf39e09be0fd4ad8aaf"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga6631af35ee817f93827c62bbda41674a"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#ga6631af35ee817f93827c62bbda41674a">tds_read_interfaces</a> (const char *server, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="memdesc:ga6631af35ee817f93827c62bbda41674a"><td class="mdescLeft"> </td><td class="mdescRight">Try to find the IP number and port for a (possibly) logical server name. <a href="#ga6631af35ee817f93827c62bbda41674a">More...</a><br /></td></tr> <tr class="separator:ga6631af35ee817f93827c62bbda41674a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga57cea6e376d7c2d28b811a5b0053210c"><td class="memItemLeft" align="right" valign="top">TDSRET </td><td class="memItemRight" valign="bottom"><a class="el" href="a00529.html#ga57cea6e376d7c2d28b811a5b0053210c">tds_set_interfaces_file_loc</a> (const char *interf)</td></tr> <tr class="memdesc:ga57cea6e376d7c2d28b811a5b0053210c"><td class="mdescLeft"> </td><td class="mdescRight">Set the full name of interface file. <a href="#ga57cea6e376d7c2d28b811a5b0053210c">More...</a><br /></td></tr> <tr class="separator:ga57cea6e376d7c2d28b811a5b0053210c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga3c2d0ac2b29c9e1cb379f44c72a8d90b"><td class="memItemLeft" align="right" valign="top"><a id="ga3c2d0ac2b29c9e1cb379f44c72a8d90b"></a> static int </td><td class="memItemRight" valign="bottom"><b>tds_try_conf_file</b> (const char *path, const char *how, const char *server, <a class="el" href="a01101.html">TDSLOGIN</a> *login)</td></tr> <tr class="separator:ga3c2d0ac2b29c9e1cb379f44c72a8d90b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga36253e4169c83926fe31e3de57ff6ef5"><td class="memItemLeft" align="right" valign="top"><a id="ga36253e4169c83926fe31e3de57ff6ef5"></a> static int </td><td class="memItemRight" valign="bottom"><b>tds_vernanme_cmp</b> (const void *key, const void *pelem)</td></tr> <tr class="separator:ga36253e4169c83926fe31e3de57ff6ef5"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a> Variables</h2></td></tr> <tr class="memitem:ga6a6305e09d7dc632aedc31748c41a6da"><td class="memItemLeft" >struct {</td></tr> <tr class="memitem:gabdb79547ea5c54112b48be39b67fc366"><td class="memItemLeft" >    unsigned char   <b>to_return</b></td></tr> <tr class="separator:gabdb79547ea5c54112b48be39b67fc366"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:gad1c6db49897958d2399d69712acf6eb4"><td class="memItemLeft" >    char   <b>value</b> [7]</td></tr> <tr class="separator:gad1c6db49897958d2399d69712acf6eb4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ga6a6305e09d7dc632aedc31748c41a6da"><td class="memItemLeft" valign="top">} </td><td class="memItemRight" valign="bottom"><b>boolean_values</b> []</td></tr> <tr class="separator:ga6a6305e09d7dc632aedc31748c41a6da"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <p>Handle reading of configuration. </p> <h2 class="groupheader">Function Documentation</h2> <a id="gaa9670914093b354e7a123b10ba877813"></a> <h2 class="memtitle"><span class="permalink"><a href="#gaa9670914093b354e7a123b10ba877813">§ </a></span>parse_server_name_for_port()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int parse_server_name_for_port </td> <td>(</td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>connection</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>login</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Check the server name to find port info first Warning: connection-> & login-> are all modified when needed. </p> <dl class="section return"><dt>Returns</dt><dd>1 when found, else 0 </dd></dl> <div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><iframe scrolling="no" frameborder="0" src="a00529_gaa9670914093b354e7a123b10ba877813_cgraph.svg" width="543" height="114"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </div> </div> </div> </div> <a id="gaca20b6e5f5a5ac1727126712dd39564b"></a> <h2 class="memtitle"><span class="permalink"><a href="#gaca20b6e5f5a5ac1727126712dd39564b">§ </a></span>search_interface_file()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int search_interface_file </td> <td>(</td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>login</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>dir</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>file</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>host</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Open and read the file 'file' searching for a logical server by the name of 'host'. </p> <p>If one is found then lookup the IP address and port number and store them in 'login'</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">dir</td><td>name of base directory for interface file </td></tr> <tr><td class="paramname">file</td><td>name of the interface file </td></tr> <tr><td class="paramname">host</td><td>logical host to search for </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 if not fount 1 if found </dd></dl> <div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><iframe scrolling="no" frameborder="0" src="a00529_gaca20b6e5f5a5ac1727126712dd39564b_cgraph.svg" width="316" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </div> </div> </div> </div> <a id="gade94d7e89ba1f668c82be0b00a7f5cd7"></a> <h2 class="memtitle"><span class="permalink"><a href="#gade94d7e89ba1f668c82be0b00a7f5cd7">§ </a></span>tds_config_verstr()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">TDS_USMALLINT* tds_config_verstr </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>tdsver</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>login</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Set TDS version from given string. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">tdsver</td><td>tds string version </td></tr> <tr><td class="paramname">login</td><td>where to store information </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>as encoded hex value: high nybble major, low nybble minor. </dd></dl> </div> </div> <a id="gacee4f06ba749b10ee9f2e5bb1c4a8910"></a> <h2 class="memtitle"><span class="permalink"><a href="#gacee4f06ba749b10ee9f2e5bb1c4a8910">§ </a></span>tds_fix_login()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void tds_fix_login </td> <td>(</td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>login</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Fix configuration after reading it. </p> <p>Currently this read some environment variables and replace some options. </p> </div> </div> <a id="gaf49eca946d1b2457e189de7207e3670c"></a> <h2 class="memtitle"><span class="permalink"><a href="#gaf49eca946d1b2457e189de7207e3670c">§ </a></span>tds_get_home_file()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static char* tds_get_home_file </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>file</em></td><td>)</td> <td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Return filename from HOME directory. </p> <dl class="section return"><dt>Returns</dt><dd>allocated string or NULL if error </dd></dl> <div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><iframe scrolling="no" frameborder="0" src="a00529_gaf49eca946d1b2457e189de7207e3670c_cgraph.svg" width="326" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </div> </div> </div> </div> <a id="gaa17936ef93e1c68833c4aab769bd90d9"></a> <h2 class="memtitle"><span class="permalink"><a href="#gaa17936ef93e1c68833c4aab769bd90d9">§ </a></span>tds_lookup_host()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct addrinfo* tds_lookup_host </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>servername</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Get the IP address for a hostname. </p> <p>Store server's IP address in the string 'ip' in dotted-decimal notation. (The "hostname" might itself be a dotted-decimal address.</p> <p>If we can't determine the IP address then 'ip' will be set to empty string. </p> </div> </div> <a id="ga45281d1cb2ac649db65d80bb3ff06b66"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga45281d1cb2ac649db65d80bb3ff06b66">§ </a></span>tds_lookup_port()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int tds_lookup_port </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>portname</em></td><td>)</td> <td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Given a portname lookup the port. </p> <p>If we can't determine the port number then return 0. </p> <div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><iframe scrolling="no" frameborder="0" src="a00529_ga45281d1cb2ac649db65d80bb3ff06b66_cgraph.svg" width="296" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </div> </div> </div> </div> <a id="ga0a63cb612f245fd85e56cfea98ff8f3b"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga0a63cb612f245fd85e56cfea98ff8f3b">§ </a></span>tds_read_conf_file()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int tds_read_conf_file </td> <td>(</td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>login</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>server</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Read configuration info for given server return 0 on error. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">login</td><td>where to store configuration </td></tr> <tr><td class="paramname">server</td><td>section of file configuration that hold configuration for a server </td></tr> </table> </dd> </dl> </div> </div> <a id="ga6580a3a0a6063c8095a3c4405061e068"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga6580a3a0a6063c8095a3c4405061e068">§ </a></span>tds_read_conf_section()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int tds_read_conf_section </td> <td>(</td> <td class="paramtype">FILE * </td> <td class="paramname"><em>in</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>section</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">TDSCONFPARSE </td> <td class="paramname"><em>tds_conf_parse</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"><em>param</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Read a section of configuration file (INI style file) </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">in</td><td>configuration file </td></tr> <tr><td class="paramname">section</td><td>section to read </td></tr> <tr><td class="paramname">tds_conf_parse</td><td>callback that receive every entry in section </td></tr> <tr><td class="paramname">param</td><td>parameter to pass to callback function </td></tr> </table> </dd> </dl> </div> </div> <a id="ga9af192306186ddf39e09be0fd4ad8aaf"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga9af192306186ddf39e09be0fd4ad8aaf">§ </a></span>tds_read_config_info()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="a01101.html">TDSLOGIN</a>* tds_read_config_info </td> <td>(</td> <td class="paramtype"><a class="el" href="a01193.html">TDSSOCKET</a> * </td> <td class="paramname"><em>tds</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>login</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="a01109.html">TDSLOCALE</a> * </td> <td class="paramname"><em>locale</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p><a class="el" href="a00529.html#ga9af192306186ddf39e09be0fd4ad8aaf" title="tds_read_config_info() will fill the tds connection structure based on configuration information gath...">tds_read_config_info()</a> will fill the tds connection structure based on configuration information gathered in the following order: 1) Program specified in TDSLOGIN structure 2) The environment variables TDSVER, TDSDUMP, TDSPORT, TDSQUERY, TDSHOST 3) A config file with the following search order: a) a readable file specified by environment variable FREETDSCONF b) a readable file in ~/.freetds.conf c) a readable file in $prefix/etc/freetds.conf 3) ~/.interfaces if exists 4) $SYBASE/interfaces if exists 5) TDS_DEF_* default values </p> <p>.tdsrc and freetds.conf have been added to make the package easier to integration with various Linux and *BSD distributions. </p> </div> </div> <a id="ga6631af35ee817f93827c62bbda41674a"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga6631af35ee817f93827c62bbda41674a">§ </a></span>tds_read_interfaces()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int tds_read_interfaces </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>server</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="a01101.html">TDSLOGIN</a> * </td> <td class="paramname"><em>login</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Try to find the IP number and port for a (possibly) logical server name. </p> <dl class="section note"><dt>Note</dt><dd>This function uses only the interfaces file and is deprecated. </dd></dl> <div class="dynheader"> Here is the call graph for this function:</div> <div class="dyncontent"> <div class="center"><iframe scrolling="no" frameborder="0" src="a00529_ga6631af35ee817f93827c62bbda41674a_cgraph.svg" width="310" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe> </div> </div> </div> </div> <a id="ga57cea6e376d7c2d28b811a5b0053210c"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga57cea6e376d7c2d28b811a5b0053210c">§ </a></span>tds_set_interfaces_file_loc()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">TDSRET tds_set_interfaces_file_loc </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>interf</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Set the full name of interface file. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">interf</td><td>file name </td></tr> </table> </dd> </dl> </div> </div> <h2 class="groupheader">Variable Documentation</h2> <a id="ga6a6305e09d7dc632aedc31748c41a6da"></a> <h2 class="memtitle"><span class="permalink"><a href="#ga6a6305e09d7dc632aedc31748c41a6da">§ </a></span>boolean_values</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const { ... } boolean_values[]</td> </tr> </table> </div><div class="memdoc"> <b>Initial value:</b><div class="fragment"><div class="line">= {</div><div class="line"> { <span class="stringliteral">"yes"</span>, 1 },</div><div class="line"> { <span class="stringliteral">"no"</span>, 0 },</div><div class="line"> { <span class="stringliteral">"on"</span>, 1 },</div><div class="line"> { <span class="stringliteral">"off"</span>, 0 },</div><div class="line"> { <span class="stringliteral">"true"</span>, 1 },</div><div class="line"> { <span class="stringliteral">"false"</span>, 0 }</div><div class="line">}</div></div><!-- fragment --> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.12 </small></address> </body> </html>