Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/japanese/FreeWnn-server/files/patch-Wnn-jlib-js.c
16461 views
1
Index: Wnn/jlib/js.c
2
===================================================================
3
RCS file: /home/cvs/private/hrs/freewnn/Wnn/jlib/js.c,v
4
retrieving revision 1.1.1.1
5
retrieving revision 1.3
6
diff -u -p -r1.1.1.1 -r1.3
7
--- Wnn/jlib/js.c 20 Dec 2008 07:13:30 -0000 1.1.1.1
8
+++ Wnn/jlib/js.c 2 Jan 2010 11:51:21 -0000 1.3
9
@@ -110,8 +110,7 @@ static WNN_JSERVER_ID *current_js = NULL
10
11
/* Packet Buffers */
12
static unsigned char snd_buf[S_BUF_SIZ]; /** ���� **/
13
-static int sbp = 0; /** �����Хåե����ݥ��󥿡� **/
14
-static int rbc = -1; /** �����Хåե����ݥ��󥿡� **/
15
+static unsigned char *sbp = snd_buf;
16
17
#if defined(EAGAIN)
18
# if defined(EWOULDBLOCK)
19
@@ -130,11 +129,10 @@ static int rbc = -1;
20
static void connect_timeout ();
21
static int _get_server_name ();
22
static int writen ();
23
+static int rcv_flush();
24
static char *get_unixdomain_of_serv_defs (), *get_service_of_serv_defs ();
25
static int get_port_num_of_serv_defs ();
26
-#if DEBUG
27
void xerror ();
28
-#endif
29
30
/********* V4 *****************/
31
/***
32
@@ -192,471 +190,506 @@ daemon_dead ()
33
(cd�Ȥ����Τϥ��ߥ�˥��������ǥХ�����̾��)
34
**/
35
static int
36
-cd_open_un (lang)
37
- register char *lang;
38
+cd_open_un(const char *lang)
39
{
40
-#ifdef AF_UNIX
41
- int sd;
42
- struct sockaddr_un saddr; /** �����å� **/
43
- char *sock_name = NULL;
44
- saddr.sun_family = AF_UNIX;
45
-
46
- /* find socket name from table by lang */
47
- if (lang && *lang)
48
- {
49
- if ((sock_name = get_unixdomain_of_serv_defs (lang)) == NULL)
50
- {
51
- sock_name = sockname;
52
- }
53
- }
54
- else
55
- {
56
- sock_name = sockname; /* Jserver */
57
- }
58
- strcpy (saddr.sun_path, sock_name);
59
+#if !defined(AF_UNIX)
60
+ return -1;
61
+#else
62
+ int sd;
63
+ struct sockaddr_un saddr;
64
+ char *sock_name = NULL;
65
+ saddr.sun_family = AF_UNIX;
66
+
67
+ /* find socket name from table by lang */
68
+ if (lang && *lang) {
69
+ if ((sock_name = get_unixdomain_of_serv_defs(lang)) == NULL)
70
+ sock_name = sockname;
71
+ } else
72
+ sock_name = sockname; /* Jserver */
73
+ strcpy (saddr.sun_path, sock_name);
74
75
- if ((sd = socket (AF_UNIX, SOCK_STREAM, 0)) == ERROR)
76
- {
77
+ if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == ERROR) {
78
#if DEBUG
79
- xerror ("jslib:Can't create unix domain socket.\n");
80
-#endif
81
- return -1;
82
- }
83
+ xerror ("jslib:Can't create unix domain socket.\n");
84
+#endif /* DEBUG */
85
+ return -1;
86
+ }
87
88
#if !defined(SUN_LEN)
89
# define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))
90
-#endif
91
- if (connect (sd, (struct sockaddr *) &saddr, SUN_LEN (&saddr)) == ERROR)
92
- {
93
-
94
+#endif /* !defined(SUN_LEN) */
95
+ if (connect(sd, (struct sockaddr *)&saddr, SUN_LEN(&saddr)) == ERROR) {
96
#if DEBUG
97
- xerror ("jslib:Can't connect unix domain socket.\n");
98
-#endif
99
- close (sd);
100
- return -1;
101
- }
102
- return sd;
103
-#else
104
- return -1;
105
+ xerror ("jslib:Can't connect unix domain socket.\n");
106
+#endif /* DEBUG */
107
+ close (sd);
108
+ return -1;
109
+ }
110
+
111
+ return sd;
112
#endif
113
}
114
115
static int
116
-cd_open_in (server, lang, timeout)
117
- register char *server;
118
- register char *lang;
119
- register int timeout;
120
-{
121
- int sd;
122
-#ifdef INET6
123
- struct addrinfo hints, *res, *res0;
124
- int error;
125
- char sport[6];
126
-#else
127
- struct sockaddr_in saddr_in; /** �����å� **/
128
- register struct hostent *hp;
129
-#endif
130
- struct servent *sp = NULL;
131
- int serverNO, port_num;
132
- int ret;
133
- char pserver[64];
134
- char sserver[64];
135
- char *serv_name = NULL;
136
-
137
- serverNO = _get_server_name (server, pserver);
138
+cd_open_in(const char *server,
139
+ const char *lang,
140
+ const int timeout)
141
+{
142
+ int sd;
143
+
144
+ struct addrinfo hints, *res, *res0;
145
+ struct sockaddr sa;
146
+ char sbuf[NI_MAXSERV];
147
+
148
+ int error;
149
+
150
+ struct servent *sp = NULL;
151
+ int serverNO, port_num;
152
+ int ret;
153
+ char pserver[NI_MAXHOST];
154
+ char sserver[NI_MAXHOST];
155
+ char *serv_name = NULL;
156
157
- /* find service name from table by lang */
158
- if (lang && *lang)
159
- {
160
- if ((serv_name = get_service_of_serv_defs (lang)) == NULL)
161
- {
162
- strcpy (sserver, SERVERNAME);
163
- }
164
- else
165
- {
166
- strcpy (sserver, serv_name);
167
- }
168
- }
169
- else
170
- {
171
-/*
172
- serv_name = SERVERNAME;
173
-*/
174
- strcpy (sserver, SERVERNAME);
175
- }
176
-/*
177
- if ((sp = getservbyname(serv_name,"tcp")) != NULL) {
178
-*/
179
- if ((sp = getservbyname (sserver, "tcp")) != NULL)
180
- {
181
- serverNO += ntohs (sp->s_port);
182
- }
183
- else
184
- {
185
- if ((port_num = get_port_num_of_serv_defs (lang)) == -1)
186
- {
187
- serverNO += WNN_PORT_IN;
188
- }
189
- else
190
- {
191
- serverNO += port_num;
192
- }
193
- }
194
-#ifdef INET6
195
- memset(&hints, 0, sizeof(hints));
196
- hints.ai_family = PF_UNSPEC;
197
- hints.ai_socktype = SOCK_STREAM;
198
- sprintf(sport, "%d", serverNO);
199
- error = getaddrinfo(pserver, sport, &hints, &res0);
200
- if (error)
201
- {
202
#if DEBUG
203
- xerror (gai_strerror(error));
204
+ fprintf(stderr, "cd_open_in: Enter: server=%s, lang=%s\n",
205
+ server, lang);
206
#endif
207
- return -1;
208
- }
209
- for (res = res0; res ; res = res->ai_next) {
210
- if (res->ai_family == AF_INET || res->ai_family == AF_INET6){
211
- if ((sd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) != ERROR){
212
-#else
213
- if ((hp = gethostbyname (pserver)) == NULL)
214
- {
215
- return -1;
216
- }
217
- bzero ((char *) &saddr_in, sizeof (saddr_in));
218
- bcopy (hp->h_addr, (char *) &saddr_in.sin_addr, hp->h_length);
219
- saddr_in.sin_family = AF_INET;
220
- saddr_in.sin_port = htons (serverNO);
221
- if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)
222
- {
223
+ serverNO = _get_server_name(server, pserver);
224
#if DEBUG
225
- xerror ("jslib:Can't create inet socket.\n");
226
+ fprintf(stderr, "cd_open_in: serverNO=%d\n", serverNO);
227
#endif
228
- return -1;
229
- }
230
+ /* find service name from table by lang */
231
+ if (lang && *lang) {
232
+ if ((serv_name = get_service_of_serv_defs (lang)) == NULL) {
233
+ strncpy (sserver, SERVERNAME, sizeof(sserver) - 1);
234
+ sserver[sizeof(sserver) - 1] = '\0';
235
+ } else {
236
+ strncpy (sserver, serv_name, sizeof(sserver) - 1);
237
+ sserver[sizeof(sserver) - 1] = '\0';
238
+ }
239
+ } else {
240
+ strncpy (sserver, SERVERNAME, sizeof(sserver) - 1);
241
+ sserver[sizeof(sserver) - 1] = '\0';
242
+ }
243
+
244
+ memset(&sa, 0, sizeof(struct sockaddr));
245
+ error = getnameinfo(&sa, sa.sa_len,
246
+ NULL, 0, sbuf, sizeof(sbuf), NI_NUMERICSERV);
247
+ if (!error) {
248
+ serverNO += atoi(sbuf);
249
+ } else {
250
+ if ((port_num = get_port_num_of_serv_defs (lang)) == -1)
251
+ serverNO += WNN_PORT_IN;
252
+ else
253
+ serverNO += port_num;
254
+ }
255
+#if DEBUG
256
+ fprintf(stderr, "cd_open_in: fixed serverNO=%d\n", serverNO);
257
#endif
258
-
259
- if (timeout != 0 && timeout > 0)
260
- {
261
- signal (SIGALRM, connect_timeout);
262
- alarm (timeout);
263
- }
264
+ memset(&hints, 0, sizeof(hints));
265
+ hints.ai_family = PF_UNSPEC;
266
+ hints.ai_socktype = SOCK_STREAM;
267
+ sprintf(sbuf, "%d", serverNO);
268
+
269
+ error = getaddrinfo(pserver, sbuf, &hints, &res0);
270
+ if (error) {
271
+ xerror(gai_strerror(error));
272
+ return -1;
273
+ }
274
+
275
+ for (res = res0; res ; res = res->ai_next) {
276
+ switch (res->ai_family) {
277
+ case AF_INET:
278
#ifdef INET6
279
- ret = connect (sd, res->ai_addr, res->ai_addrlen);
280
-#else
281
- ret = connect (sd, (struct sockaddr *) &saddr_in, sizeof (saddr_in));
282
+ case AF_INET6:
283
#endif
284
- if (timeout != 0 && timeout > 0)
285
- {
286
- alarm (0);
287
- signal (SIGALRM, SIG_IGN);
288
- }
289
- if (ret == ERROR)
290
- {
291
-#if DEBUG
292
+ sd = socket(res->ai_family,
293
+ res->ai_socktype,
294
+ res->ai_protocol);
295
+
296
+ if (sd == ERROR) {
297
+ switch (res->ai_family) {
298
+ case AF_INET:
299
+ xerror ("jslib:Can't create inet socket.\n");
300
#ifdef INET6
301
- if (res->ai_family == AF_INET)
302
- xerror ("jslib:Can't connect inet socket.\n");
303
- else if (res->ai_family == AF_INET6)
304
- xerror ("jslib:Can't connect inet6 socket.\n");
305
-#else
306
- xerror ("jslib:Can't connect inet socket.\n");
307
-#endif
308
+ case AF_INET6:
309
+ xerror ("jslib:Can't create inet6 socket.\n");
310
#endif
311
+ default:
312
+ xerror("jslib:Cannot create socket. Unknown socket type.\n");
313
+ }
314
+
315
+ break;
316
+ }
317
+ if (timeout) {
318
+ signal(SIGALRM, connect_timeout);
319
+ alarm(timeout);
320
+ }
321
+ ret = connect(sd,
322
+ res->ai_addr,
323
+ res->ai_addrlen);
324
+ if (timeout) {
325
+ alarm(0);
326
+ signal(SIGALRM, SIG_IGN);
327
+ }
328
+ if (ret == ERROR) {
329
+ switch (res->ai_family) {
330
+ case AF_INET:
331
+ fprintf(stderr, "jslib:Can't connect inet socket. (sd=%d)\n", sd);
332
+ break;
333
+#ifdef INET6
334
+ case AF_INET6:
335
+ fprintf(stderr, "jslib:Can't connect inet6 socket. (sd=%d)\n", sd);
336
+ break;
337
+#endif
338
+ default:
339
+ xerror("jslib:Cannot connect. Unknown socket type.\n");
340
+ break;
341
+ }
342
#ifdef HAVE_CLOSESOCKET
343
- closesocket (sd);
344
+ closesocket(sd);
345
#else
346
- close (sd);
347
+ close(sd);
348
#endif
349
-#ifdef INET6
350
- sd = ERROR;
351
- } else
352
- break;
353
- } else {
354
+ sd = ERROR;
355
+ }
356
#if DEBUG
357
- if (res->ai_family == AF_INET)
358
- xerror ("jslib:Can't create inet socket.\n");
359
- else if (res->ai_family == AF_INET6)
360
- xerror ("jslib:Can't create inet6 socket.\n");
361
-#endif
362
- }
363
- }
364
- }
365
- freeaddrinfo(res0);
366
- if (sd == ERROR) {
367
+ fprintf(stderr, "connect: sd=%d\n", sd);
368
#endif
369
- return -1;
370
- }
371
- return sd;
372
+ freeaddrinfo(res0);
373
+ return sd;
374
+ }
375
+ }
376
+ freeaddrinfo(res0);
377
+ return sd;
378
}
379
380
static void
381
-connect_timeout ()
382
+connect_timeout()
383
{
384
}
385
386
/* get server name and return serverNo */
387
static int
388
-_get_server_name (server, pserver)
389
- char *server;
390
- char *pserver;
391
+_get_server_name(char *server,
392
+ char *pserver)
393
{
394
- register char *p;
395
+ char *p;
396
#ifdef INET6
397
- int len;
398
+ int len;
399
400
- if (server[0] == '[') {
401
- p = strchr(server++, ']');
402
- if (p) {
403
- len = p-server<64-1?p-server:64-1;
404
- strncpy(pserver, server, len);
405
- pserver[len] = '\0';
406
- } else
407
- pserver[0] = '\0';
408
- } else {
409
+ if (server[0] == '[') {
410
+ p = strchr(server++, ']');
411
+ if (p) {
412
+ len = p-server < NI_MAXHOST - 1 ? p-server : NI_MAXHOST - 1;
413
+ strncpy(pserver, server, len);
414
+ pserver[len] = '\0';
415
+ } else
416
+ pserver[0] = '\0';
417
+ } else {
418
#endif
419
/* Workaround for pserver buffer overrun : Nov 11,1999 by T.Aono */
420
- /* assumes pserver[64]. variable length string is not supported. */
421
- strncpy(pserver, server, 64-1);
422
- pserver[64-1] = '\0';
423
- p = pserver;
424
+ /* assumes pserver[NI_MAXHOST]. variable length string is not supported. */
425
+ strncpy(pserver, server, NI_MAXHOST - 1);
426
+ pserver[NI_MAXHOST - 1] = '\0';
427
+ p = pserver;
428
#ifdef INET6
429
- }
430
+ }
431
#endif
432
- for (; *p && *p != ':'; p++);
433
- if (!*p)
434
- return (0); /* does not have a colon */
435
- *p = 0;
436
- return (atoi (++p));
437
+
438
+ for (; *p && *p != ':'; p++);
439
+ if (!*p) /* does not have a colon */
440
+ return (0);
441
+ *p = 0;
442
+ return (atoi (++p));
443
}
444
445
/* Packet SND/RCV subroutines */
446
static void put4com ();
447
448
-/** �ѥ��åȤΥإå��������� **/
449
+/* send packet header */
450
static void
451
-snd_head (cmd)
452
- int cmd; /** cmd=���ޥ�� **/
453
+snd_head(int cmd)
454
{
455
- sbp = 0;
456
- put4com (cmd);
457
- rbc = -1;
458
+ sbp = snd_buf;
459
+ put4com(cmd);
460
+ rcv_flush();
461
}
462
463
-/** �ѥ��åȤΥإå��������� **/
464
+/* send environment header */
465
static int
466
-snd_env_head (env, cmd)
467
- register struct wnn_env *env;
468
- int cmd; /** cmd=���ޥ�� **/
469
+snd_env_head (struct wnn_env *env,
470
+ int cmd)
471
{
472
- snd_head (cmd);
473
- put4com (env->env_id);
474
- return 0;
475
+ snd_head(cmd);
476
+ put4com(env->env_id);
477
+ return 0;
478
}
479
480
-/** �ѥ��åȤΥإå��������� **/
481
+/* send server header */
482
static int
483
-snd_server_head (server, cmd)
484
- register WNN_JSERVER_ID *server;
485
- int cmd; /** cmd=���ޥ�� **/
486
+snd_server_head(WNN_JSERVER_ID *server,
487
+ int cmd)
488
{
489
- snd_head (cmd);
490
- return 0;
491
+ snd_head(cmd);
492
+ return 0;
493
}
494
495
-/** �����Хåե���ե�å��夹�� **/
496
+/* flush send buffer */
497
static int
498
-snd_flush ()
499
+snd_flush()
500
{
501
- if (sbp == 0)
502
- return (-1);
503
- writen (sbp);
504
- sbp = 0;
505
- return (0);
506
+ /* empty buffer; no need to flush */
507
+ if (sbp == snd_buf)
508
+ return 0;
509
+
510
+ writen(sbp);
511
+ return 0;
512
}
513
514
+/* send data */
515
static int
516
-writen (n)
517
- int n;
518
+writen(unsigned char *sp)
519
{
520
- int cc, x;
521
- for (cc = 0; cc < n;)
522
- {
523
- errno = 0;
524
+ unsigned char *bp = snd_buf;
525
+ int n;
526
+ size_t total = sp - bp;
527
+
528
+ while (bp < sp && bp <= snd_buf + sizeof(snd_buf)) {
529
+#if DEBUG_IO
530
+ fprintf(stderr,
531
+ "writen: loop: sp - bp = %d\n", sp - bp);
532
+#endif
533
#ifdef HAVE_SEND
534
- x = send (current_sd, &snd_buf[cc], n - cc, 0);
535
+ n = send(current_sd, bp, sp - bp, 0);
536
#else
537
- x = write (current_sd, &snd_buf[cc], n - cc);
538
+ n = write(current_sd, bp, sp - bp);
539
#endif
540
- if (x < 0)
541
- {
542
- if (ERRNO_CHECK (errno) || errno == EINTR)
543
- {
544
- continue;
545
- }
546
- else
547
- {
548
- daemon_dead ();
549
- return -1;
550
- }
551
- }
552
- cc += x;
553
- }
554
-#if DEBUG
555
- fprintf (stderr, "jslib:writen=%d\n", x);
556
-/* dmp(snd_buf,x); */
557
+ if (n < 0) {
558
+ if (ERRNO_CHECK (errno) || errno == EINTR) {
559
+ continue;
560
+ } else {
561
+#if DEBUG_IO
562
+ fprintf(stderr,
563
+ "writen: failed. errno=%d\n", errno);
564
+#endif
565
+ daemon_dead();
566
+ return -1;
567
+ }
568
+ }
569
+ bp += n;
570
+ }
571
+ sbp = snd_buf;
572
+#if DEBUG_IO
573
+ fprintf (stderr, "jslib:writen=%d\n", total);
574
#endif
575
- return (0);
576
+ return 0;
577
}
578
579
-/** ������1�������� **/
580
+/* send one byte to server */
581
static void
582
-put1com (c)
583
- int c;
584
+put1com(int c)
585
{
586
- snd_buf[sbp++] = c;
587
- if (sbp >= S_BUF_SIZ)
588
- {
589
- writen (S_BUF_SIZ);
590
- sbp = 0;
591
- }
592
+ unsigned int data = c & 0xff;
593
+
594
+#if DEBUG_IO
595
+ fprintf(stderr, "put1com: [%02x]\n", data);
596
+#endif
597
+
598
+ /* flush buffer if full */
599
+ if (sbp - snd_buf >= S_BUF_SIZ) {
600
+ writen(sbp);
601
+ }
602
+ *(sbp++) = data;
603
}
604
605
-/** ������2�������� **/
606
+/* send two bytes */
607
static void
608
-put2com (c)
609
- int c;
610
+put2com(int c)
611
{
612
- put1com (c >> (8 * 1));
613
- put1com (c);
614
+ unsigned int data = c & 0xffff;
615
+#if DEBUG_IO
616
+ fprintf(stderr, "put2com: [%04x]\n", data);
617
+#endif
618
+ put1com(data >> (8 * 1));
619
+ put1com(data);
620
}
621
622
-/** ������4�������� **/
623
+/* send four bytes */
624
static void
625
-put4com (c)
626
- int c;
627
+put4com(int c)
628
{
629
- put1com (c >> (8 * 3));
630
- put1com (c >> (8 * 2));
631
- put1com (c >> (8 * 1));
632
- put1com (c);
633
+ unsigned int data = c & 0xffffffff;
634
+#if DEBUG_IO
635
+ fprintf(stderr, "put4com: [%08x]\n", data);
636
+#endif
637
+ put1com(data >> (8 * 3));
638
+ put1com(data >> (8 * 2));
639
+ put1com(data >> (8 * 1));
640
+ put1com(data);
641
}
642
643
-/** �����Ф�ʸ��������� **/
644
+/* send w_char string */
645
static void
646
-putwscom (p)
647
- register w_char *p;
648
+putwscom(w_char *p)
649
{
650
- if (p == NULL)
651
- {
652
- put2com (0);
653
- return;
654
- }
655
- while (*p)
656
- put2com (*p++);
657
- put2com (0);
658
+ if (p == NULL) {
659
+ put2com(0x0000);
660
+ return;
661
+ }
662
+
663
+#if DEBUG_IO
664
+ fprintf(stderr, "putwscom: [%s]\n", p);
665
+#endif
666
+ while(*p)
667
+ put2com (*p++);
668
+ put2com(0x0000);
669
}
670
671
-/** �����Ф�ʸ��������� **/
672
+/* send string */
673
static void
674
-putscom (p)
675
- register char *p;
676
+putscom(unsigned char *p)
677
{
678
- if (p == NULL)
679
- {
680
- put1com (0);
681
- return;
682
- }
683
- while (*p)
684
- put1com (*p++);
685
- put1com (0);
686
-}
687
+ if (p == NULL) {
688
+ put1com(0x00);
689
+ return;
690
+ }
691
+#if DEBUG_IO
692
+ fprintf(stderr, "putscom: [%s]\n", p);
693
+#endif
694
+ while (*p)
695
+ put1com(*p++);
696
+ put1com(0);
697
+}
698
+
699
+static unsigned char rcv_buf[R_BUF_SIZ];
700
+static unsigned char *rbp = rcv_buf;
701
+static unsigned char *rp = rcv_buf;
702
703
-/** �����Ф���1�Х��ȼ����� **/
704
static int
705
-get1com ()
706
+rcv_flush()
707
{
708
- static int rbp;
709
- static unsigned char rcv_buf[R_BUF_SIZ]; /** ���� **/
710
- if (rbc <= 0)
711
- {
712
- while (1)
713
- {
714
- errno = 0;
715
-#ifdef HAVE_RECV
716
- rbc = recv (current_sd, rcv_buf, R_BUF_SIZ, 0);
717
-#else
718
- rbc = read (current_sd, rcv_buf, R_BUF_SIZ);
719
-#endif
720
- if (rbc <= 0)
721
- {
722
- if (ERRNO_CHECK (errno))
723
- {
724
- continue;
725
- }
726
- else if (rbc == 0)
727
- {
728
- daemon_dead ();
729
- return -1;
730
- }
731
- else
732
- { /* cc == -1 */
733
- if (errno != EINTR)
734
- {
735
- daemon_dead ();
736
- return -1;
737
- }
738
- continue;
739
- }
740
- }
741
- rbp = 0;
742
-#if DEBUG
743
- fprintf (stderr, "jslib:read:rbc=%d\n", rbc);
744
-/* dmp(rcv_buf,rbc); */
745
+#if DEBUG_IO
746
+ fprintf(stderr, "rcv_flush\n");
747
#endif
748
- break;
749
- }
750
- }
751
- rbc--;
752
- return rcv_buf[rbp++] & 0xFF;
753
+ rbp = rp = &rcv_buf[0];
754
+ return 0;
755
}
756
757
-/** �����Ф���2�Х��ȼ����� **/
758
-static int
759
-get2com ()
760
+static unsigned int
761
+get1com()
762
{
763
- register int h;
764
- h = get1com ();
765
- return (h << 8) | get1com ();
766
-}
767
+ int n;
768
769
-/** �����Ф���4�Х��ȼ����� **/
770
-static int
771
-get4com ()
772
-{
773
- register int h1, h2, h3;
774
- h1 = get1com () << 24;
775
- h2 = get1com () << 16;
776
- h3 = get1com () << 8;
777
- return h1 | h2 | h3 | get1com ();
778
+#if DEBUG_IO
779
+ fprintf(stderr, "get1com: Enter\n");
780
+#endif
781
+ if (rp == rbp) {
782
+ /* rp == rbp case; no data in rcv_buf */
783
+
784
+ rbp = rp = rcv_buf;
785
+
786
+ while (rbp == rp) {
787
+ errno = 0;
788
+#ifdef HAVE_RECV
789
+ n = recv(current_sd, rcv_buf, sizeof(rcv_buf), 0);
790
+#else
791
+ n = read(current_sd, rcv_buf, sizeof(rcv_buf));
792
+#endif
793
+#if DEBUG_IO
794
+ fprintf(stderr, "recvloop: n=%d\n", n);
795
+#endif
796
+ if (n == 0) {
797
+ if (ERRNO_CHECK(errno)) {
798
+ continue;
799
+ } else {
800
+ daemon_dead();
801
+ return -1;
802
+ }
803
+ }
804
+ if (n < 0) {
805
+ if (ERRNO_CHECK(errno) || errno == EINTR) {
806
+ continue;
807
+ } else {
808
+ daemon_dead();
809
+ return -1;
810
+ }
811
+ }
812
+ rp += n;
813
+ }
814
+#if DEBUG_IO
815
+ fprintf (stderr, "jslib:read:rp - rbp =%d\n", rp - rbp);
816
+#endif
817
+ }
818
+
819
+#if DEBUG_IO
820
+ fprintf(stderr, "get1com: data [%02x]\n", *rbp & 0xff);
821
+
822
+ fprintf(stderr, "rcv_buf: ");
823
+ {
824
+ int i;
825
+ for (i=0; i < rp - rbp; i++) {
826
+ fprintf(stderr, "[%02x]", *(rbp + i));
827
+ }
828
+ fprintf(stderr, "\n");
829
+ }
830
+#endif
831
+ return (*(rbp++) & 0xff);
832
+}
833
+
834
+/* get two bytes */
835
+static unsigned int
836
+get2com()
837
+{
838
+ unsigned int h;
839
+#if DEBUG_IO
840
+ fprintf(stderr, "get2com: Enter\n");
841
+#endif
842
+ h = get1com() << 8;
843
+ h |= get1com();
844
+
845
+#if DEBUG_IO
846
+ fprintf(stderr, "get2com: [%04x]\n", h);
847
+#endif
848
+ return h;
849
+}
850
+
851
+/* get four bytes */
852
+static unsigned int
853
+get4com()
854
+{
855
+ unsigned int h;
856
+#if DEBUG_IO
857
+ fprintf(stderr, "get4com: Enter\n");
858
+#endif
859
+ h = get1com() << 24;
860
+ h |= get1com() << 16;
861
+ h |= get1com() << 8;
862
+ h |= get1com();
863
+#if DEBUG_IO
864
+ fprintf(stderr, "get4com: [%08x]\n", h);
865
+#endif
866
+ return h;
867
}
868
869
-/** �����Ф�ʸ��������� **/
870
+/* get string */
871
static void
872
-getscom (p)
873
- register char *p;
874
+getscom(unsigned char *p)
875
{
876
- while (*p++ = get1com ())
877
- ;
878
+ unsigned char *bp = p;
879
+ while (*p++ = get1com())
880
+ ;
881
+#if DEBUG_IO
882
+ fprintf(stderr, "getscom: [%s]\n", bp);
883
+#endif
884
}
885
886
-/** �����Ф�ʸ��������� **/
887
+/* get wstring */
888
static void
889
-getwscom (p)
890
- w_char register *p;
891
+getwscom(w_char *p)
892
{
893
- while (*p++ = get2com ())
894
- ;
895
+ while (*p++ = get2com ())
896
+ ;
897
}
898
899
#ifdef nodef
900
@@ -687,7 +720,6 @@ Strcpy (s1, s2)
901
902
903
/* Debug Subroutines */
904
-#if DEBUG
905
void
906
xerror (s)
907
char *s;
908
@@ -716,8 +748,6 @@ dmp (p, c)
909
}
910
}
911
912
-#endif
913
-
914
/* get login name form /etc/passwd file */
915
static char *
916
getlogname ()
917
@@ -741,87 +771,104 @@ getlogname ()
918
919
/** jserver ����³���롣jserver_id ���֤��� **/
920
WNN_JSERVER_ID *
921
-js_open_lang (server, lang, timeout)
922
- register char *server, *lang;
923
- register int timeout;
924
-{
925
- char *new_js;
926
- char host[WNN_HOSTLEN], user[WNN_ENVNAME_LEN];
927
- int x;
928
+js_open_lang (char *server,
929
+ char *lang,
930
+ int timeout)
931
+{
932
+ char *new_js;
933
+ char host[WNN_HOSTLEN];
934
+ char user[WNN_ENVNAME_LEN];
935
+ int x;
936
+
937
+ if (wnn_msg_cat == NULL) {
938
+ char nlspath[MAXPATHLEN];
939
+ strcpy (nlspath, LIBDIR);
940
+ strcat (nlspath, "/%L/%N");
941
+ wnn_msg_cat = msg_open ("libwnn.msg", nlspath, lang);
942
+ if (wnn_msg_cat == NULL) {
943
+ fprintf (stderr,
944
+ "libwnn: Cannot open message file for libwnn.a\n");
945
+ }
946
+ }
947
+
948
+ if (!(new_js = (char *) malloc (sizeof (WNN_JSERVER_ID)))) {
949
+ wnn_errorno = WNN_ALLOC_FAIL;
950
+ return NULL;
951
+ }
952
+
953
+ current_js = (WNN_JSERVER_ID *) new_js;
954
+ if (server == NULL) {
955
+ current_js->js_name[0] = '\0';
956
+ } else {
957
+ strncpy(current_js->js_name, server, sizeof (current_js->js_name) - 1);
958
+ current_js->js_name[sizeof (current_js->js_name) - 1] = '\0';
959
+ }
960
961
- if (wnn_msg_cat == NULL)
962
- {
963
- char nlspath[MAXPATHLEN];
964
- strcpy (nlspath, LIBDIR);
965
- strcat (nlspath, "/%L/%N");
966
- wnn_msg_cat = msg_open ("libwnn.msg", nlspath, lang);
967
- if (wnn_msg_cat == NULL)
968
- {
969
- fprintf (stderr, "libwnn: Cannot open message file for libwnn.a\n");
970
- }
971
- }
972
- sbp = 0; /* init sndBufPointer */
973
- if (!(new_js = (char *) malloc (sizeof (WNN_JSERVER_ID))))
974
- {
975
- wnn_errorno = WNN_ALLOC_FAIL;
976
- return NULL;
977
- }
978
- current_js = (WNN_JSERVER_ID *) new_js;
979
- if (server == NULL)
980
- {
981
- current_js->js_name[0] = '\0';
982
- }
983
- else
984
- {
985
- strncpy (current_js->js_name, server, sizeof (current_js->js_name) - 1);
986
- current_js->js_name[sizeof (current_js->js_name) - 1] = '\0';
987
- }
988
- current_js->js_dead = 0;
989
- current_js->js_dead_env_flg = 0;
990
+ current_js->js_dead = 0;
991
+ current_js->js_dead_env_flg = 0;
992
/*
993
if(user == NULL || 0==strcmp(user,""))
994
*/
995
- strncpy (user, getlogname (), WNN_ENVNAME_LEN);
996
- user[WNN_ENVNAME_LEN - 1] = '\0'; /* truncate by WNN_ENVNAME_LEN */
997
- if (server == NULL || 0 == strcmp (server, "") || 0 == strcmp (server, "unix"))
998
- {
999
- strcpy (host, "unix");
1000
- if ((current_sd = cd_open_un (lang)) == -1)
1001
- {
1002
- wnn_errorno = WNN_SOCK_OPEN_FAIL;
1003
- free ((char *) current_js);
1004
- current_js = NULL;
1005
- return NULL;
1006
- }
1007
- }
1008
- else
1009
- {
1010
- gethostname (host, WNN_HOSTLEN);
1011
- host[WNN_HOSTLEN - 1] = '\0'; /* truncate by WNN_HOSTLEN */
1012
- if ((current_sd = cd_open_in (server, lang, timeout)) == -1)
1013
- {
1014
- wnn_errorno = WNN_SOCK_OPEN_FAIL;
1015
- free ((char *) current_js);
1016
- current_js = NULL;
1017
- return NULL;
1018
- }
1019
- }
1020
- current_js->sd = current_sd;
1021
- handler_of_jserver_dead (NULL);
1022
- snd_head (JS_OPEN);
1023
- put4com (JLIB_VERSION); /* H.T. */
1024
- putscom (host);
1025
- putscom (user);
1026
- snd_flush ();
1027
- if (get4com () == -1)
1028
- {
1029
- x = wnn_errorno = get4com ();
1030
- js_close (current_js); /* H.T. */
1031
- current_js = NULL;
1032
- wnn_errorno = x;
1033
- return NULL;
1034
- }
1035
- return current_js;
1036
+ strncpy(user, getlogname (), WNN_ENVNAME_LEN);
1037
+ user[WNN_ENVNAME_LEN - 1] = '\0'; /* truncate by WNN_ENVNAME_LEN */
1038
+
1039
+#if DEBUG
1040
+ fprintf(stderr, "js_open_lang: server: %s\n", server);
1041
+#endif
1042
+ if (server == NULL
1043
+ || 0 == strcmp(server, "")
1044
+ || 0 == strcmp(server, "unix")) {
1045
+ strcpy(host, "unix");
1046
+ if ((current_sd = cd_open_un(lang)) == -1) {
1047
+ wnn_errorno = WNN_SOCK_OPEN_FAIL;
1048
+ free ((char *) current_js);
1049
+ current_js = NULL;
1050
+ return NULL;
1051
+ }
1052
+ } else {
1053
+ gethostname (host, WNN_HOSTLEN);
1054
+ host[WNN_HOSTLEN - 1] = '\0'; /* truncate by WNN_HOSTLEN */
1055
+#if DEBUG
1056
+ fprintf(stderr, "js_open_lang: before cd_open_in\n");
1057
+#endif
1058
+ if ((current_sd = cd_open_in(server, lang, timeout)) == -1) {
1059
+ wnn_errorno = WNN_SOCK_OPEN_FAIL;
1060
+ free((char *)current_js);
1061
+ current_js = NULL;
1062
+#if DEBUG
1063
+ fprintf(stderr, "js_open_lang: cd_open_in failed\n");
1064
+#endif
1065
+ return NULL;
1066
+ }
1067
+#if DEBUG
1068
+ fprintf(stderr, "js_open_lang: after cd_open_in\n");
1069
+#endif
1070
+ }
1071
+
1072
+#if DEBUG
1073
+ fprintf(stderr, "current_sd=%d\n", current_sd);
1074
+#endif
1075
+ current_js->sd = current_sd;
1076
+ handler_of_jserver_dead (NULL);
1077
+ snd_head(JS_OPEN);
1078
+ put4com(JLIB_VERSION); /* H.T. */
1079
+ putscom(host);
1080
+ putscom(user);
1081
+ snd_flush();
1082
+
1083
+#if DEBUG
1084
+ fprintf(stderr, "cd_open_in: before get4com\n");
1085
+#endif
1086
+
1087
+ if (get4com() == -1) {
1088
+ x = wnn_errorno = get4com ();
1089
+ js_close(current_js); /* H.T. */
1090
+ current_js = NULL;
1091
+ wnn_errorno = x;
1092
+ return NULL;
1093
+ }
1094
+
1095
+ return current_js;
1096
}
1097
1098
1099
@@ -2988,29 +3035,25 @@ get_serv_defs (lang, cnt)
1100
}
1101
1102
char *
1103
-_wnn_get_machine_of_serv_defs (lang)
1104
- char *lang;
1105
+_wnn_get_machine_of_serv_defs(char *lang)
1106
{
1107
return (get_serv_defs (lang, MACHINE_NAME));
1108
}
1109
1110
static char *
1111
-get_unixdomain_of_serv_defs (lang)
1112
- char *lang;
1113
+get_unixdomain_of_serv_defs(char *lang)
1114
{
1115
return (get_serv_defs (lang, UNIXDOMAIN_NAME));
1116
}
1117
1118
static char *
1119
-get_service_of_serv_defs (lang)
1120
- char *lang;
1121
+get_service_of_serv_defs(char *lang)
1122
{
1123
return (get_serv_defs (lang, SERVICE_NAME));
1124
}
1125
1126
static int
1127
-get_port_num_of_serv_defs (lang)
1128
- char *lang;
1129
+get_port_num_of_serv_defs(char *lang)
1130
{
1131
char *port_char;
1132
1133
1134