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