summaryrefslogtreecommitdiff
path: root/inputmethod/skkinput/patches/patch-ab
blob: 57ad937f86e82a5beea2c43dc74e62ab85963adc (plain)
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 ;
 
   /* デフォルトのキーマップを作成する。*/