1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
$NetBSD: patch-ab,v 1.1.1.1 2002/05/31 13:00:02 seb Exp $
--- skkconfig.c.orig Thu Nov 13 22:42:43 1997
+++ skkconfig.c Thu Nov 9 00:19:40 2000
@@ -100,6 +100,7 @@
* skkinput の動作を決定する変数群。
*/
extern int skkserv_portnum ;
+extern char *skkserv_portstr ;
extern char *skkserv_host ;
extern char *skkinput_local_jisyo_name ;
extern char *skkinput_backup_jisyo_name ;
@@ -980,6 +981,21 @@
return ;
}
+#ifdef SKK_CONF
+char *
+strsave(const char *str)
+{
+ char *p;
+
+ if ((p = malloc(strlen(str) + 1)) == NULL) {
+ fprintf(stderr, "Fatal: Memory Exhausted.\n");
+ exit(1);
+ }
+ strcpy(p, str);
+ return p;
+}
+#endif
+
/*
* skkinput の動作記述をする変数を初期化する関数。
*------
@@ -987,30 +1003,54 @@
*/
void initSkkinputDousaketteiVariables( void )
{
- struct servent *servent ;
+#ifdef SKK_CONF /* use skk.conf */
+ FILE *conffp;
+ char line[128];
+ char hostbuf[128];
+ char servbuf[128];
+ char *confhost = NULL;
+ char *confport = NULL;
+
+ if ((conffp = fopen(SKK_CONF, "r")) != NULL) {
+ char *p, *data;
+
+ while (fgets(line, sizeof line, conffp) != NULL) {
+ if ((p = strchr(line, '#')) != NULL)
+ *p = '\0';
+ if ((p = strtok(line, ": \t\n")) == NULL)
+ continue;
+ if ((data = strtok((char *) NULL, " \t\n")) == NULL)
+ continue;
+ if (!strcmp(p, "skkserv_host")) {
+ strcpy(hostbuf, data);
+ confhost = hostbuf;
+ } else if (!strcmp(p, "skkserv_port")) {
+ strcpy(servbuf, data);
+ confport = servbuf;
+ }
+ }
+ }
+#endif
/* 局所辞書の所在を知らないとしておく。*/
skkinput_local_jisyo_name = DEFAULT_SKKLJISYO ;
skkinput_backup_jisyo_name = DEFAULT_SKKBJISYO ;
skkinput_record_name = DEFAULT_SKKRECORD ;
skk_local_jisyo_name = DEFAULT_SKKLOCALJISYO ;
- /* "/etc/services" からポート番号を得ておく。*/
- servent = getservbyname( SKKSERV_SERVICE_NAME, SKKSERV_SERVICE_PROTO ) ;
- if( servent == NULL ){
- /* /etc/services に設定はなかったので、config.h の中のを使う。*/
- skkserv_portnum = atoi( DEFAULT_SKKPORT ) ;
- } else {
- /* /etc/services に設定があった…。*/
- skkserv_portnum = htons( servent->s_port ) ;
-#if defined(DEBUG)
- fprintf
- ( stderr, "getservbyname: \"%s\", %d\n",
- servent->s_name, skkserv_portnum ) ;
+#ifdef SKK_CONF
+ if (confport)
+ skkserv_portstr = strsave(confport);
+ else
#endif
- }
+ skkserv_portstr = SKKSERV_SERVICE_NAME;
/* 環境変数 SKKSERV が設定されていれば、それを DEFAULT の skkserv *
* host とする。*/
if( ( skkserv_host = getenv( "SKKSERVER" ) ) == NULL )
+#ifdef SKK_CONF
+ if (confhost)
+ skkserv_host = strsave(confhost); /* XXX this may leak */
+ else
+#endif
skkserv_host = DEFAULT_SKKSERVER ;
/* デフォルトのキーマップを作成する。*/
|