⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.c

📁 ncbi源码
💻 C
📖 第 1 页 / 共 3 页
字号:
			} else if (!strcmp(option,TDS_STR_EMUL_LE)) {				config->emul_little_endian = tds_config_boolean(value);			} else if (!strcmp(option,TDS_STR_TEXTSZ)) {				if (atoi(value)) 					config->text_size = atoi(value);			} else if (!strcmp(option,TDS_STR_CHARSET)) {				if (config->char_set) free(config->char_set);				config->char_set = strdup(value);			} else if (!strcmp(option,TDS_STR_CLCHARSET)) {				if (config->client_charset) free(config->client_charset);				config->client_charset = strdup(value);			} else if (!strcmp(option,TDS_STR_LANGUAGE)) {				if (config->language) free(config->language);				config->language = strdup(value);			} else if (!strcmp(option,TDS_STR_APPENDMODE)) {				g_append_mode = tds_config_boolean(value);			}                        else tdsdump_log(TDS_DBG_INFO1, "%L UNRECOGNIZED option '%s'...ignoring.\n", option);		}	}	return found;}#ifdef NCBI_FTDSstatic int get_server_info(char *server, int entry_num, char *ip_addr, char *ip_port,  char *tds_ver);#endifstatic void tds_read_interfaces(char *server, TDSCONFIGINFO *config){char ip_addr[255], ip_port[255], tds_ver[255];	/* read $SYBASE/interfaces */	/* This needs to be cleaned up */#ifdef NCBI_FTDS    int entry_num;	for(entry_num= 0; entry_num < NCBI_NUM_SERVERS; entry_num++) {	    get_server_info(server, entry_num+1, ip_addr, ip_port, tds_ver);		if (strlen(ip_addr) == 0) break;		if (config->ip_addr[entry_num]) free(config->ip_addr[entry_num]);		/* FIXME check result, use strdup */		config->ip_addr[entry_num] = (char *) malloc(strlen(ip_addr)+1);		strcpy(config->ip_addr[entry_num], ip_addr);		if (atoi(ip_port)) {		    config->port[entry_num] = atoi(ip_port);		}		if (strlen(tds_ver)) {		    tds_config_verstr(tds_ver, config);			/* if it doesn't match a known version do nothing with it */		}		}	while(entry_num < NCBI_NUM_SERVERS) {		if (config->ip_addr[entry_num]) free(config->ip_addr[entry_num]);		config->ip_addr[entry_num++]= NULL;	}#else	get_server_info(server, ip_addr, ip_port, tds_ver);	if (strlen(ip_addr)) {		if (config->ip_addr) free(config->ip_addr);		/* FIXME check result, use strdup */		config->ip_addr = (char *) malloc(strlen(ip_addr)+1);		strcpy(config->ip_addr, ip_addr);	}	if (atoi(ip_port)) {		config->port = atoi(ip_port);	}	if (strlen(tds_ver)) {		tds_config_verstr(tds_ver, config);		/* if it doesn't match a known version do nothing with it */	}	#endif}static void tds_config_login(TDSCONFIGINFO *config, TDSLOGIN *login){	if (login->server_name && strlen(login->server_name)) {		if (config->server_name) free(config->server_name);		config->server_name = strdup(login->server_name);	}		if (login->major_version || login->minor_version) {		config->major_version = login->major_version;		config->minor_version = login->minor_version;	}        if (login->language && strlen(login->language)) {		if (config->language) free(config->language);		config->language = strdup(login->language);	}        if (login->char_set && strlen(login->char_set)) {		if (config->char_set) free(config->char_set);		config->char_set = strdup(login->char_set);	}        if (login->host_name && strlen(login->host_name)) {		if (config->host_name) free(config->host_name);		config->host_name = strdup(login->host_name);		/* DBSETLHOST and it's equivilants are commentary fields		** they don't affect config->ip_addr (the server) but they show		** up in an sp_who as the *clients* hostname.  (bsb, 11/10) 		*/		/* should work with IP (mlilback, 11/7/01) */		/*		if (config->ip_addr) free(config->ip_addr);		config->ip_addr = calloc(sizeof(char),18);		lookup_host(config->host_name, NULL, config->ip_addr, NULL);		*/	}        if (login->app_name && strlen(login->app_name)) {		if (config->app_name) free(config->app_name);		config->app_name = strdup(login->app_name);	}        if (login->user_name && strlen(login->user_name)) {		if (config->user_name) free(config->user_name);		config->user_name = strdup(login->user_name);	}        if (login->password && strlen(login->password)) {		if (config->password) {			/* for security reason clear memory */			memset(config->password,0,strlen(config->password));			free(config->password);		}		config->password = strdup(login->password);	}        if (login->library && strlen(login->library)) {		if (config->library) free(config->library);		config->library = strdup(login->library);	}        if (login->encrypted) {		config->encrypted = 1;	}        if (login->suppress_language) {		config->suppress_language = 1;	}        if (login->bulk_copy) {		config->bulk_copy = 1;	}        if (login->block_size) {		config->block_size = login->block_size;	}#ifdef NCBI_FTDS	else if(config->major_version >= 7) {	        config->block_size= 6*1024;	}#endif        if (login->port) {#ifdef NCBI_FTDS		config->port[0] = login->port;#else		config->port = login->port;#endif	}}static void tds_config_env_dsquery(TDSCONFIGINFO *config){char *s;	if ((s=getenv("TDSQUERY"))) {		if (s && strlen(s)) {			if (config->server_name) free(config->server_name);			config->server_name = strdup(s);			tdsdump_log(TDS_DBG_INFO1, "%L Setting 'server_name' to '%s' from $TDSQUERY.\n",s);		} 		return;	}	if ((s=getenv("DSQUERY"))) {		if (s && strlen(s)) {			if (config->server_name) free(config->server_name);			config->server_name = strdup(s);			tdsdump_log(TDS_DBG_INFO1, "%L Setting 'server_name' to '%s' from $DSQUERY.\n",s);		} 	}}static void tds_config_env_tdsdump(TDSCONFIGINFO *config){char *s;char path[255];pid_t pid=0;        if ((s=getenv("TDSDUMP"))) {                if (!strlen(s)) {                        pid = getpid();                        sprintf(path,"/tmp/freetds.log.%d",pid);			if (config->dump_file) free(config->dump_file);			config->dump_file = strdup(path);                } else {			if (config->dump_file) free(config->dump_file);			config->dump_file = strdup(s);                }                tdsdump_log(TDS_DBG_INFO1, "%L Setting 'dump_file' to '%s' from $TDSDUMP.\n",config->dump_file);        }}static void tds_config_env_tdsport(TDSCONFIGINFO *config){char *s;	if ((s=getenv("TDSPORT"))) {#ifdef NCBI_FTDS            config->port[0]=atoi(s);#else            config->port=atoi(s);#endif            tdsdump_log(TDS_DBG_INFO1, "%L Setting 'port' to %s from $TDSPORT.\n",s);	}	return;}static void tds_config_env_tdsver(TDSCONFIGINFO *config){char *tdsver;	if ((tdsver=getenv("TDSVER"))) {            tds_config_verstr(tdsver, config);            tdsdump_log(TDS_DBG_INFO1, "%L Setting 'tdsver' to %s from $TDSVER.\n",tdsver);	}	return;}/* TDSHOST env var, pkleef@openlinksw.com 01/21/02 */static void tds_config_env_tdshost(TDSCONFIGINFO *config){char *tdshost;char tmp[256];	if ((tdshost=getenv("TDSHOST"))) {		lookup_host (tdshost, NULL, tmp, NULL);#ifdef NCBI_FTDS		if (config->ip_addr[0])			free (config->ip_addr[0]);		config->ip_addr[0] = strdup (tmp);#else		if (config->ip_addr)			free (config->ip_addr);		config->ip_addr = strdup (tmp);#endif                tdsdump_log(TDS_DBG_INFO1, "%L Setting 'ip_addr' to %s (%s) from $TDSHOST.\n",tmp, tdshost);	}	return;}static void tds_config_verstr(char *tdsver, TDSCONFIGINFO *config){	if (!strcmp(tdsver,"42") || !strcmp(tdsver,"4.2")) {		config->major_version=4;		config->minor_version=2;		return;	} else if (!strcmp(tdsver,"46") || !strcmp(tdsver,"4.6")) {		config->major_version=4;		config->minor_version=6;		return;	} else if (!strcmp(tdsver,"50") || !strcmp(tdsver,"5.0")) {		config->major_version=5;		config->minor_version=0;		return;	} else if (!strcmp(tdsver,"70") || !strcmp(tdsver,"7.0")) {		config->major_version=7;		config->minor_version=0;		return;	} else if (!strcmp(tdsver,"80") || !strcmp(tdsver,"8.0")) {		config->major_version=8;		config->minor_version=0;		return;	}}int set_interfaces_file_loc(char *interf){	if (strlen(interf)>=MAXPATH) return 0;	strcpy(interf_file,interf);	return 1; /* SUCCEED */}/* ============================== lookup_host() ============================== * * Def:  Given a servername and port name or number, lookup the *       hostname and service.  The server ip will be stored in the *       string 'servername' in dotted-decimal notation.  The service port *       number will be stored in string form in the 'port' parameter. * *       If we can't determine both the IP address and port number then *       'ip' and 'port' will be set to empty strings. * * Ret:  void * * =========================================================================== */static void lookup_host(   const char  *servername,  /* (I) name of the server                  */   const char  *portname,    /* (I) name or number of the port          */   char        *ip,          /* (O) dotted-decimal ip address of server */   char        *port)        /* (O) port number of the service          */{   struct hostent   *host    = NULL;   struct servent   *service = NULL;   int               num     = 0;   unsigned int		ip_addr=0;   /* Storage for reentrant getaddrby* calls */   struct hostent result;   char buffer[4096];   int h_errnop;   /* Storage for reentrant getservbyname */   struct servent serv_result;   /* Only call gethostbyname if servername is not an ip address.       This call take a while and is useless for an ip address.      mlilback 3/2/02 */   ip_addr = inet_addr(servername);   if (ip_addr == INADDR_NONE)      host = tds_gethostbyname_r(servername, &result, buffer, sizeof(buffer), &h_errnop);	#ifndef NOREVERSELOOKUPS/* froy@singleentry.com 12/21/2000 */	if (host==NULL) {		char addr [4];		int a0, a1, a2, a3;		sscanf (servername, "%d.%d.%d.%d", &a0, &a1, &a2, &a3);		addr [0] = a0;		addr [1] = a1;		addr [2] = a2;		addr [3] = a3;		host    = tds_gethostbyaddr_r (addr, 4, AF_INET, &result, buffer, sizeof(buffer), &h_errnop);	}/* end froy */ #endif   if (!host) {      /* if servername is ip, copy to ip. */      if (INADDR_NONE != ip_addr)         strncpy(ip, servername, 17);       else         ip[0]   = '\0';   } else {      struct in_addr *ptr = (struct in_addr *) host->h_addr;      strncpy(ip, inet_ntoa(*ptr), 17);   }   if (portname) {#ifdef NCBI_FTDS	 char* tail;	 num= (int)strtol(portname, &tail, 10);	 if((num == 0) || (tail != NULL && *tail != '\0')) {	   service = tds_getservbyname_r(portname, "tcp", &serv_result, buffer, sizeof(buffer));	   if(service) 		 num= ntohs(service->s_port);	 }#else   	 service = tds_getservbyname_r(portname, "tcp", &serv_result, buffer, sizeof(buffer));      if (service==NULL) {         num = atoi(portname);

⌨️ 快捷键说明

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