Path: blob/main/japanese/FreeWnn-lib/files/patch-Wnn-jlib-js.c
18157 views
--- Wnn/jlib/js.c.orig 2005-04-10 15:26:37 UTC1+++ Wnn/jlib/js.c2@@ -110,8 +110,7 @@ static WNN_JSERVER_ID *current_js = NULL;34/* Packet Buffers */5static unsigned char snd_buf[S_BUF_SIZ]; /** ���� **/6-static int sbp = 0; /** �����Хåե����ݥ��� **/7-static int rbc = -1; /** �����Хåե����ݥ��� **/8+static unsigned char *sbp = snd_buf;910#if defined(EAGAIN)11# if defined(EWOULDBLOCK)12@@ -130,11 +129,10 @@ static int rbc = -1; /** �����Хå�13static void connect_timeout ();14static int _get_server_name ();15static int writen ();16+static int rcv_flush();17static char *get_unixdomain_of_serv_defs (), *get_service_of_serv_defs ();18static int get_port_num_of_serv_defs ();19-#if DEBUG20void xerror ();21-#endif2223/********* V4 *****************/24/***25@@ -192,471 +190,506 @@ daemon_dead ()26(cd�Ȥ����Τϥ��ߥ�˥��������ǥХ�����̾��)27**/28static int29-cd_open_un (lang)30- register char *lang;31+cd_open_un(const char *lang)32{33-#ifdef AF_UNIX34- int sd;35- struct sockaddr_un saddr; /** �����å� **/36- char *sock_name = NULL;37- saddr.sun_family = AF_UNIX;38+#if !defined(AF_UNIX)39+ return -1;40+#else41+ int sd;42+ struct sockaddr_un saddr;43+ char *sock_name = NULL;44+ saddr.sun_family = AF_UNIX;4546- /* 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- else55- {56- sock_name = sockname; /* Jserver */57- }58- strcpy (saddr.sun_path, sock_name);59+ /* find socket name from table by lang */60+ if (lang && *lang) {61+ if ((sock_name = get_unixdomain_of_serv_defs(lang)) == NULL)62+ sock_name = sockname;63+ } else64+ sock_name = sockname; /* Jserver */65+ strcpy (saddr.sun_path, sock_name);6667- if ((sd = socket (AF_UNIX, SOCK_STREAM, 0)) == ERROR)68- {69+ if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == ERROR) {70#if DEBUG71- xerror ("jslib:Can't create unix domain socket.\n");72-#endif73- return -1;74- }75+ xerror ("jslib:Can't create unix domain socket.\n");76+#endif /* DEBUG */77+ return -1;78+ }7980#if !defined(SUN_LEN)81# define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))82-#endif83- if (connect (sd, (struct sockaddr *) &saddr, SUN_LEN (&saddr)) == ERROR)84- {85-86+#endif /* !defined(SUN_LEN) */87+ if (connect(sd, (struct sockaddr *)&saddr, SUN_LEN(&saddr)) == ERROR) {88#if DEBUG89- xerror ("jslib:Can't connect unix domain socket.\n");90+ xerror ("jslib:Can't connect unix domain socket.\n");91+#endif /* DEBUG */92+ close (sd);93+ return -1;94+ }95+96+ return sd;97#endif98- close (sd);99- return -1;100- }101- return sd;102-#else103- return -1;104-#endif105}106107static int108-cd_open_in (server, lang, timeout)109- register char *server;110- register char *lang;111- register int timeout;112+cd_open_in(const char *server,113+ const char *lang,114+ const int timeout)115{116- int sd;117-#ifdef INET6118- struct addrinfo hints, *res, *res0;119- int error;120- char sport[6];121-#else122- struct sockaddr_in saddr_in; /** �����å� **/123- register struct hostent *hp;124-#endif125- struct servent *sp = NULL;126- int serverNO, port_num;127- int ret;128- char pserver[64];129- char sserver[64];130- char *serv_name = NULL;131+ int sd;132133- serverNO = _get_server_name (server, pserver);134+ struct addrinfo hints, *res, *res0;135+ struct sockaddr sa;136+ char sbuf[NI_MAXSERV];137138- /* find service name from table by lang */139- if (lang && *lang)140- {141- if ((serv_name = get_service_of_serv_defs (lang)) == NULL)142- {143- strcpy (sserver, SERVERNAME);144- }145- else146- {147- strcpy (sserver, serv_name);148- }149- }150- else151- {152-/*153- serv_name = SERVERNAME;154-*/155- strcpy (sserver, SERVERNAME);156- }157-/*158- if ((sp = getservbyname(serv_name,"tcp")) != NULL) {159-*/160- if ((sp = getservbyname (sserver, "tcp")) != NULL)161- {162- serverNO += ntohs (sp->s_port);163- }164- else165- {166- if ((port_num = get_port_num_of_serv_defs (lang)) == -1)167- {168- serverNO += WNN_PORT_IN;169- }170- else171- {172- serverNO += port_num;173- }174- }175-#ifdef INET6176- memset(&hints, 0, sizeof(hints));177- hints.ai_family = PF_UNSPEC;178- hints.ai_socktype = SOCK_STREAM;179- sprintf(sport, "%d", serverNO);180- error = getaddrinfo(pserver, sport, &hints, &res0);181- if (error)182- {183+ int error;184+185+ struct servent *sp = NULL;186+ int serverNO, port_num;187+ int ret;188+ char pserver[NI_MAXHOST];189+ char sserver[NI_MAXHOST];190+ char *serv_name = NULL;191+192#if DEBUG193- xerror (gai_strerror(error));194+ fprintf(stderr, "cd_open_in: Enter: server=%s, lang=%s\n",195+ server, lang);196#endif197- return -1;198- }199- for (res = res0; res ; res = res->ai_next) {200- if (res->ai_family == AF_INET || res->ai_family == AF_INET6){201- if ((sd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) != ERROR){202-#else203- if ((hp = gethostbyname (pserver)) == NULL)204- {205- return -1;206- }207- bzero ((char *) &saddr_in, sizeof (saddr_in));208- bcopy (hp->h_addr, (char *) &saddr_in.sin_addr, hp->h_length);209- saddr_in.sin_family = AF_INET;210- saddr_in.sin_port = htons (serverNO);211- if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)212- {213+ serverNO = _get_server_name(server, pserver);214#if DEBUG215- xerror ("jslib:Can't create inet socket.\n");216+ fprintf(stderr, "cd_open_in: serverNO=%d\n", serverNO);217#endif218- return -1;219- }220+ /* find service name from table by lang */221+ if (lang && *lang) {222+ if ((serv_name = get_service_of_serv_defs (lang)) == NULL) {223+ strncpy (sserver, SERVERNAME, sizeof(sserver) - 1);224+ sserver[sizeof(sserver) - 1] = '\0';225+ } else {226+ strncpy (sserver, serv_name, sizeof(sserver) - 1);227+ sserver[sizeof(sserver) - 1] = '\0';228+ }229+ } else {230+ strncpy (sserver, SERVERNAME, sizeof(sserver) - 1);231+ sserver[sizeof(sserver) - 1] = '\0';232+ }233+234+ memset(&sa, 0, sizeof(struct sockaddr));235+ error = getnameinfo(&sa, sa.sa_len,236+ NULL, 0, sbuf, sizeof(sbuf), NI_NUMERICSERV);237+ if (!error) {238+ serverNO += atoi(sbuf);239+ } else {240+ if ((port_num = get_port_num_of_serv_defs (lang)) == -1)241+ serverNO += WNN_PORT_IN;242+ else243+ serverNO += port_num;244+ }245+#if DEBUG246+ fprintf(stderr, "cd_open_in: fixed serverNO=%d\n", serverNO);247#endif248+ memset(&hints, 0, sizeof(hints));249+ hints.ai_family = PF_UNSPEC;250+ hints.ai_socktype = SOCK_STREAM;251+ sprintf(sbuf, "%d", serverNO);252253- if (timeout != 0 && timeout > 0)254- {255- signal (SIGALRM, connect_timeout);256- alarm (timeout);257- }258+ error = getaddrinfo(pserver, sbuf, &hints, &res0);259+ if (error) {260+ xerror(gai_strerror(error));261+ return -1;262+ }263+264+ for (res = res0; res ; res = res->ai_next) {265+ switch (res->ai_family) {266+ case AF_INET:267#ifdef INET6268- ret = connect (sd, res->ai_addr, res->ai_addrlen);269-#else270- ret = connect (sd, (struct sockaddr *) &saddr_in, sizeof (saddr_in));271+ case AF_INET6:272#endif273- if (timeout != 0 && timeout > 0)274- {275- alarm (0);276- signal (SIGALRM, SIG_IGN);277- }278- if (ret == ERROR)279- {280-#if DEBUG281+ sd = socket(res->ai_family,282+ res->ai_socktype,283+ res->ai_protocol);284+285+ if (sd == ERROR) {286+ switch (res->ai_family) {287+ case AF_INET:288+ xerror ("jslib:Can't create inet socket.\n");289#ifdef INET6290- if (res->ai_family == AF_INET)291- xerror ("jslib:Can't connect inet socket.\n");292- else if (res->ai_family == AF_INET6)293- xerror ("jslib:Can't connect inet6 socket.\n");294-#else295- xerror ("jslib:Can't connect inet socket.\n");296+ case AF_INET6:297+ xerror ("jslib:Can't create inet6 socket.\n");298#endif299+ default:300+ xerror("jslib:Cannot create socket. Unknown socket type.\n");301+ }302+303+ break;304+ }305+ if (timeout) {306+ signal(SIGALRM, connect_timeout);307+ alarm(timeout);308+ }309+ ret = connect(sd,310+ res->ai_addr,311+ res->ai_addrlen);312+ if (timeout) {313+ alarm(0);314+ signal(SIGALRM, SIG_IGN);315+ }316+ if (ret == ERROR) {317+ switch (res->ai_family) {318+ case AF_INET:319+ fprintf(stderr, "jslib:Can't connect inet socket. (sd=%d)\n", sd);320+ break;321+#ifdef INET6322+ case AF_INET6:323+ fprintf(stderr, "jslib:Can't connect inet6 socket. (sd=%d)\n", sd);324+ break;325#endif326+ default:327+ xerror("jslib:Cannot connect. Unknown socket type.\n");328+ break;329+ }330#ifdef HAVE_CLOSESOCKET331- closesocket (sd);332+ closesocket(sd);333#else334- close (sd);335+ close(sd);336#endif337-#ifdef INET6338- sd = ERROR;339- } else340- break;341- } else {342+ sd = ERROR;343+ }344#if DEBUG345- if (res->ai_family == AF_INET)346- xerror ("jslib:Can't create inet socket.\n");347- else if (res->ai_family == AF_INET6)348- xerror ("jslib:Can't create inet6 socket.\n");349+ fprintf(stderr, "connect: sd=%d\n", sd);350#endif351- }352- }353- }354- freeaddrinfo(res0);355- if (sd == ERROR) {356-#endif357- return -1;358- }359- return sd;360+ freeaddrinfo(res0);361+ return sd;362+ }363+ }364+ freeaddrinfo(res0);365+ return sd;366}367368static void369-connect_timeout ()370+connect_timeout()371{372}373374/* get server name and return serverNo */375static int376-_get_server_name (server, pserver)377- char *server;378- char *pserver;379+_get_server_name(char *server,380+ char *pserver)381{382- register char *p;383+ char *p;384#ifdef INET6385- int len;386+ int len;387388- if (server[0] == '[') {389- p = strchr(server++, ']');390- if (p) {391- len = p-server<64-1?p-server:64-1;392- strncpy(pserver, server, len);393- pserver[len] = '\0';394- } else395- pserver[0] = '\0';396- } else {397+ if (server[0] == '[') {398+ p = strchr(server++, ']');399+ if (p) {400+ len = p-server < NI_MAXHOST - 1 ? p-server : NI_MAXHOST - 1;401+ strncpy(pserver, server, len);402+ pserver[len] = '\0';403+ } else404+ pserver[0] = '\0';405+ } else {406#endif407/* Workaround for pserver buffer overrun : Nov 11,1999 by T.Aono */408- /* assumes pserver[64]. variable length string is not supported. */409- strncpy(pserver, server, 64-1);410- pserver[64-1] = '\0';411- p = pserver;412+ /* assumes pserver[NI_MAXHOST]. variable length string is not supported. */413+ strncpy(pserver, server, NI_MAXHOST - 1);414+ pserver[NI_MAXHOST - 1] = '\0';415+ p = pserver;416#ifdef INET6417- }418+ }419#endif420- for (; *p && *p != ':'; p++);421- if (!*p)422- return (0); /* does not have a colon */423- *p = 0;424- return (atoi (++p));425+426+ for (; *p && *p != ':'; p++);427+ if (!*p) /* does not have a colon */428+ return (0);429+ *p = 0;430+ return (atoi (++p));431}432433/* Packet SND/RCV subroutines */434static void put4com ();435436-/** �ѥ��åȤΥإå��������� **/437+/* send packet header */438static void439-snd_head (cmd)440- int cmd; /** cmd=���ޥ�� **/441+snd_head(int cmd)442{443- sbp = 0;444- put4com (cmd);445- rbc = -1;446+ sbp = snd_buf;447+ put4com(cmd);448+ rcv_flush();449}450451-/** �ѥ��åȤΥإå��������� **/452+/* send environment header */453static int454-snd_env_head (env, cmd)455- register struct wnn_env *env;456- int cmd; /** cmd=���ޥ�� **/457+snd_env_head (struct wnn_env *env,458+ int cmd)459{460- snd_head (cmd);461- put4com (env->env_id);462- return 0;463+ snd_head(cmd);464+ put4com(env->env_id);465+ return 0;466}467468-/** �ѥ��åȤΥإå��������� **/469+/* send server header */470static int471-snd_server_head (server, cmd)472- register WNN_JSERVER_ID *server;473- int cmd; /** cmd=���ޥ�� **/474+snd_server_head(WNN_JSERVER_ID *server,475+ int cmd)476{477- snd_head (cmd);478- return 0;479+ snd_head(cmd);480+ return 0;481}482483-/** �����Хåե���ե�å��夹�� **/484+/* flush send buffer */485static int486-snd_flush ()487+snd_flush()488{489- if (sbp == 0)490- return (-1);491- writen (sbp);492- sbp = 0;493- return (0);494+ /* empty buffer; no need to flush */495+ if (sbp == snd_buf)496+ return 0;497+498+ writen(sbp);499+ return 0;500}501502+/* send data */503static int504-writen (n)505- int n;506+writen(unsigned char *sp)507{508- int cc, x;509- for (cc = 0; cc < n;)510- {511- errno = 0;512+ unsigned char *bp = snd_buf;513+ int n;514+ size_t total = sp - bp;515+516+ while (bp < sp && bp <= snd_buf + sizeof(snd_buf)) {517+#if DEBUG_IO518+ fprintf(stderr,519+ "writen: loop: sp - bp = %d\n", sp - bp);520+#endif521#ifdef HAVE_SEND522- x = send (current_sd, &snd_buf[cc], n - cc, 0);523+ n = send(current_sd, bp, sp - bp, 0);524#else525- x = write (current_sd, &snd_buf[cc], n - cc);526+ n = write(current_sd, bp, sp - bp);527#endif528- if (x < 0)529- {530- if (ERRNO_CHECK (errno) || errno == EINTR)531- {532- continue;533- }534- else535- {536- daemon_dead ();537- return -1;538- }539- }540- cc += x;541- }542-#if DEBUG543- fprintf (stderr, "jslib:writen=%d\n", x);544-/* dmp(snd_buf,x); */545+ if (n < 0) {546+ if (ERRNO_CHECK (errno) || errno == EINTR) {547+ continue;548+ } else {549+#if DEBUG_IO550+ fprintf(stderr,551+ "writen: failed. errno=%d\n", errno);552#endif553- return (0);554+ daemon_dead();555+ return -1;556+ }557+ }558+ bp += n;559+ }560+ sbp = snd_buf;561+#if DEBUG_IO562+ fprintf (stderr, "jslib:writen=%d\n", total);563+#endif564+ return 0;565}566567-/** �����Ф�1�Х������� **/568+/* send one byte to server */569static void570-put1com (c)571- int c;572+put1com(int c)573{574- snd_buf[sbp++] = c;575- if (sbp >= S_BUF_SIZ)576- {577- writen (S_BUF_SIZ);578- sbp = 0;579- }580+ unsigned int data = c & 0xff;581+582+#if DEBUG_IO583+ fprintf(stderr, "put1com: [%02x]\n", data);584+#endif585+586+ /* flush buffer if full */587+ if (sbp - snd_buf >= S_BUF_SIZ) {588+ writen(sbp);589+ }590+ *(sbp++) = data;591}592593-/** �����Ф�2�Х������� **/594+/* send two bytes */595static void596-put2com (c)597- int c;598+put2com(int c)599{600- put1com (c >> (8 * 1));601- put1com (c);602+ unsigned int data = c & 0xffff;603+#if DEBUG_IO604+ fprintf(stderr, "put2com: [%04x]\n", data);605+#endif606+ put1com(data >> (8 * 1));607+ put1com(data);608}609610-/** �����Ф�4�Х������� **/611+/* send four bytes */612static void613-put4com (c)614- int c;615+put4com(int c)616{617- put1com (c >> (8 * 3));618- put1com (c >> (8 * 2));619- put1com (c >> (8 * 1));620- put1com (c);621+ unsigned int data = c & 0xffffffff;622+#if DEBUG_IO623+ fprintf(stderr, "put4com: [%08x]\n", data);624+#endif625+ put1com(data >> (8 * 3));626+ put1com(data >> (8 * 2));627+ put1com(data >> (8 * 1));628+ put1com(data);629}630631-/** �����Ф�ʸ��������� **/632+/* send w_char string */633static void634-putwscom (p)635- register w_char *p;636+putwscom(w_char *p)637{638- if (p == NULL)639- {640- put2com (0);641- return;642- }643- while (*p)644- put2com (*p++);645- put2com (0);646+ if (p == NULL) {647+ put2com(0x0000);648+ return;649+ }650+651+#if DEBUG_IO652+ fprintf(stderr, "putwscom: [%s]\n", p);653+#endif654+ while(*p)655+ put2com (*p++);656+ put2com(0x0000);657}658659-/** �����Ф�ʸ��������� **/660+/* send string */661static void662-putscom (p)663- register char *p;664+putscom(unsigned char *p)665{666- if (p == NULL)667- {668- put1com (0);669- return;670- }671- while (*p)672- put1com (*p++);673- put1com (0);674+ if (p == NULL) {675+ put1com(0x00);676+ return;677+ }678+#if DEBUG_IO679+ fprintf(stderr, "putscom: [%s]\n", p);680+#endif681+ while (*p)682+ put1com(*p++);683+ put1com(0);684}685686-/** �����Ф���1�Х��ȼ����� **/687+static unsigned char rcv_buf[R_BUF_SIZ];688+static unsigned char *rbp = rcv_buf;689+static unsigned char *rp = rcv_buf;690+691static int692-get1com ()693+rcv_flush()694{695- static int rbp;696- static unsigned char rcv_buf[R_BUF_SIZ]; /** ���� **/697- if (rbc <= 0)698- {699- while (1)700- {701- errno = 0;702+#if DEBUG_IO703+ fprintf(stderr, "rcv_flush\n");704+#endif705+ rbp = rp = &rcv_buf[0];706+ return 0;707+}708+709+static unsigned int710+get1com()711+{712+ int n;713+714+#if DEBUG_IO715+ fprintf(stderr, "get1com: Enter\n");716+#endif717+ if (rp == rbp) {718+ /* rp == rbp case; no data in rcv_buf */719+720+ rbp = rp = rcv_buf;721+722+ while (rbp == rp) {723+ errno = 0;724#ifdef HAVE_RECV725- rbc = recv (current_sd, rcv_buf, R_BUF_SIZ, 0);726+ n = recv(current_sd, rcv_buf, sizeof(rcv_buf), 0);727#else728- rbc = read (current_sd, rcv_buf, R_BUF_SIZ);729+ n = read(current_sd, rcv_buf, sizeof(rcv_buf));730#endif731- if (rbc <= 0)732- {733- if (ERRNO_CHECK (errno))734- {735- continue;736- }737- else if (rbc == 0)738- {739- daemon_dead ();740- return -1;741- }742- else743- { /* cc == -1 */744- if (errno != EINTR)745- {746- daemon_dead ();747- return -1;748- }749- continue;750- }751- }752- rbp = 0;753-#if DEBUG754- fprintf (stderr, "jslib:read:rbc=%d\n", rbc);755-/* dmp(rcv_buf,rbc); */756+#if DEBUG_IO757+ fprintf(stderr, "recvloop: n=%d\n", n);758#endif759- break;760- }761- }762- rbc--;763- return rcv_buf[rbp++] & 0xFF;764+ if (n == 0) {765+ if (ERRNO_CHECK(errno)) {766+ continue;767+ } else {768+ daemon_dead();769+ return -1;770+ }771+ }772+ if (n < 0) {773+ if (ERRNO_CHECK(errno) || errno == EINTR) {774+ continue;775+ } else {776+ daemon_dead();777+ return -1;778+ }779+ }780+ rp += n;781+ }782+#if DEBUG_IO783+ fprintf (stderr, "jslib:read:rp - rbp =%d\n", rp - rbp);784+#endif785+ }786+787+#if DEBUG_IO788+ fprintf(stderr, "get1com: data [%02x]\n", *rbp & 0xff);789+790+ fprintf(stderr, "rcv_buf: ");791+ {792+ int i;793+ for (i=0; i < rp - rbp; i++) {794+ fprintf(stderr, "[%02x]", *(rbp + i));795+ }796+ fprintf(stderr, "\n");797+ }798+#endif799+ return (*(rbp++) & 0xff);800}801802-/** �����Ф���2�Х��ȼ����� **/803-static int804-get2com ()805+/* get two bytes */806+static unsigned int807+get2com()808{809- register int h;810- h = get1com ();811- return (h << 8) | get1com ();812+ unsigned int h;813+#if DEBUG_IO814+ fprintf(stderr, "get2com: Enter\n");815+#endif816+ h = get1com() << 8;817+ h |= get1com();818+819+#if DEBUG_IO820+ fprintf(stderr, "get2com: [%04x]\n", h);821+#endif822+ return h;823}824825-/** �����Ф���4�Х��ȼ����� **/826-static int827-get4com ()828+/* get four bytes */829+static unsigned int830+get4com()831{832- register int h1, h2, h3;833- h1 = get1com () << 24;834- h2 = get1com () << 16;835- h3 = get1com () << 8;836- return h1 | h2 | h3 | get1com ();837+ unsigned int h;838+#if DEBUG_IO839+ fprintf(stderr, "get4com: Enter\n");840+#endif841+ h = get1com() << 24;842+ h |= get1com() << 16;843+ h |= get1com() << 8;844+ h |= get1com();845+#if DEBUG_IO846+ fprintf(stderr, "get4com: [%08x]\n", h);847+#endif848+ return h;849}850851-/** �����Ф�ʸ��������� **/852+/* get string */853static void854-getscom (p)855- register char *p;856+getscom(unsigned char *p)857{858- while (*p++ = get1com ())859- ;860+ unsigned char *bp = p;861+ while (*p++ = get1com())862+ ;863+#if DEBUG_IO864+ fprintf(stderr, "getscom: [%s]\n", bp);865+#endif866}867868-/** �����Ф�ʸ��������� **/869+/* get wstring */870static void871-getwscom (p)872- w_char register *p;873+getwscom(w_char *p)874{875- while (*p++ = get2com ())876- ;877+ while (*p++ = get2com ())878+ ;879}880881#ifdef nodef882@@ -687,7 +720,6 @@ Strcpy (s1, s2)883884885/* Debug Subroutines */886-#if DEBUG887void888xerror (s)889char *s;890@@ -716,8 +748,6 @@ dmp (p, c)891}892}893894-#endif895-896/* get login name form /etc/passwd file */897static char *898getlogname ()899@@ -741,87 +771,104 @@ getlogname ()900901/** jserver ����³���롣jserver_id ���֤��� **/902WNN_JSERVER_ID *903-js_open_lang (server, lang, timeout)904- register char *server, *lang;905- register int timeout;906+js_open_lang (char *server,907+ char *lang,908+ int timeout)909{910- char *new_js;911- char host[WNN_HOSTLEN], user[WNN_ENVNAME_LEN];912- int x;913+ char *new_js;914+ char host[WNN_HOSTLEN];915+ char user[WNN_ENVNAME_LEN];916+ int x;917918- if (wnn_msg_cat == NULL)919- {920- char nlspath[MAXPATHLEN];921- strcpy (nlspath, LIBDIR);922- strcat (nlspath, "/%L/%N");923- wnn_msg_cat = msg_open ("libwnn.msg", nlspath, lang);924- if (wnn_msg_cat == NULL)925- {926- fprintf (stderr, "libwnn: Cannot open message file for libwnn.a\n");927- }928- }929- sbp = 0; /* init sndBufPointer */930- if (!(new_js = (char *) malloc (sizeof (WNN_JSERVER_ID))))931- {932- wnn_errorno = WNN_ALLOC_FAIL;933- return NULL;934- }935- current_js = (WNN_JSERVER_ID *) new_js;936- if (server == NULL)937- {938- current_js->js_name[0] = '\0';939- }940- else941- {942- strncpy (current_js->js_name, server, sizeof (current_js->js_name) - 1);943- current_js->js_name[sizeof (current_js->js_name) - 1] = '\0';944- }945- current_js->js_dead = 0;946- current_js->js_dead_env_flg = 0;947+ if (wnn_msg_cat == NULL) {948+ char nlspath[MAXPATHLEN];949+ strcpy (nlspath, LIBDIR);950+ strcat (nlspath, "/%L/%N");951+ wnn_msg_cat = msg_open ("libwnn.msg", nlspath, lang);952+ if (wnn_msg_cat == NULL) {953+ fprintf (stderr,954+ "libwnn: Cannot open message file for libwnn.a\n");955+ }956+ }957+958+ if (!(new_js = (char *) malloc (sizeof (WNN_JSERVER_ID)))) {959+ wnn_errorno = WNN_ALLOC_FAIL;960+ return NULL;961+ }962+963+ current_js = (WNN_JSERVER_ID *) new_js;964+ if (server == NULL) {965+ current_js->js_name[0] = '\0';966+ } else {967+ strncpy(current_js->js_name, server, sizeof (current_js->js_name) - 1);968+ current_js->js_name[sizeof (current_js->js_name) - 1] = '\0';969+ }970+971+ current_js->js_dead = 0;972+ current_js->js_dead_env_flg = 0;973/*974if(user == NULL || 0==strcmp(user,""))975*/976- strncpy (user, getlogname (), WNN_ENVNAME_LEN);977- user[WNN_ENVNAME_LEN - 1] = '\0'; /* truncate by WNN_ENVNAME_LEN */978- if (server == NULL || 0 == strcmp (server, "") || 0 == strcmp (server, "unix"))979- {980- strcpy (host, "unix");981- if ((current_sd = cd_open_un (lang)) == -1)982- {983- wnn_errorno = WNN_SOCK_OPEN_FAIL;984- free ((char *) current_js);985- current_js = NULL;986- return NULL;987- }988- }989- else990- {991- gethostname (host, WNN_HOSTLEN);992- host[WNN_HOSTLEN - 1] = '\0'; /* truncate by WNN_HOSTLEN */993- if ((current_sd = cd_open_in (server, lang, timeout)) == -1)994- {995- wnn_errorno = WNN_SOCK_OPEN_FAIL;996- free ((char *) current_js);997- current_js = NULL;998- return NULL;999- }1000- }1001- current_js->sd = current_sd;1002- handler_of_jserver_dead (NULL);1003- snd_head (JS_OPEN);1004- put4com (JLIB_VERSION); /* H.T. */1005- putscom (host);1006- putscom (user);1007- snd_flush ();1008- if (get4com () == -1)1009- {1010- x = wnn_errorno = get4com ();1011- js_close (current_js); /* H.T. */1012- current_js = NULL;1013- wnn_errorno = x;1014- return NULL;1015- }1016- return current_js;1017+ strncpy(user, getlogname (), WNN_ENVNAME_LEN);1018+ user[WNN_ENVNAME_LEN - 1] = '\0'; /* truncate by WNN_ENVNAME_LEN */1019+1020+#if DEBUG1021+ fprintf(stderr, "js_open_lang: server: %s\n", server);1022+#endif1023+ if (server == NULL1024+ || 0 == strcmp(server, "")1025+ || 0 == strcmp(server, "unix")) {1026+ strcpy(host, "unix");1027+ if ((current_sd = cd_open_un(lang)) == -1) {1028+ wnn_errorno = WNN_SOCK_OPEN_FAIL;1029+ free ((char *) current_js);1030+ current_js = NULL;1031+ return NULL;1032+ }1033+ } else {1034+ gethostname (host, WNN_HOSTLEN);1035+ host[WNN_HOSTLEN - 1] = '\0'; /* truncate by WNN_HOSTLEN */1036+#if DEBUG1037+ fprintf(stderr, "js_open_lang: before cd_open_in\n");1038+#endif1039+ if ((current_sd = cd_open_in(server, lang, timeout)) == -1) {1040+ wnn_errorno = WNN_SOCK_OPEN_FAIL;1041+ free((char *)current_js);1042+ current_js = NULL;1043+#if DEBUG1044+ fprintf(stderr, "js_open_lang: cd_open_in failed\n");1045+#endif1046+ return NULL;1047+ }1048+#if DEBUG1049+ fprintf(stderr, "js_open_lang: after cd_open_in\n");1050+#endif1051+ }1052+1053+#if DEBUG1054+ fprintf(stderr, "current_sd=%d\n", current_sd);1055+#endif1056+ current_js->sd = current_sd;1057+ handler_of_jserver_dead (NULL);1058+ snd_head(JS_OPEN);1059+ put4com(JLIB_VERSION); /* H.T. */1060+ putscom(host);1061+ putscom(user);1062+ snd_flush();1063+1064+#if DEBUG1065+ fprintf(stderr, "cd_open_in: before get4com\n");1066+#endif1067+1068+ if (get4com() == -1) {1069+ x = wnn_errorno = get4com ();1070+ js_close(current_js); /* H.T. */1071+ current_js = NULL;1072+ wnn_errorno = x;1073+ return NULL;1074+ }1075+1076+ return current_js;1077}107810791080@@ -979,7 +1026,7 @@ js_disconnect (env)1081free((char *)env);1082*/1083set_current_js (env->js_id);1084- handler_of_jserver_dead (NULL);1085+ handler_of_jserver_dead (-1);1086snd_env_head (&tmp_env, JS_DISCONNECT);1087snd_flush ();1088x = get4com ();1089@@ -2988,29 +3035,25 @@ get_serv_defs (lang, cnt)1090}10911092char *1093-_wnn_get_machine_of_serv_defs (lang)1094- char *lang;1095+_wnn_get_machine_of_serv_defs(char *lang)1096{1097return (get_serv_defs (lang, MACHINE_NAME));1098}10991100static char *1101-get_unixdomain_of_serv_defs (lang)1102- char *lang;1103+get_unixdomain_of_serv_defs(char *lang)1104{1105return (get_serv_defs (lang, UNIXDOMAIN_NAME));1106}11071108static char *1109-get_service_of_serv_defs (lang)1110- char *lang;1111+get_service_of_serv_defs(char *lang)1112{1113return (get_serv_defs (lang, SERVICE_NAME));1114}11151116static int1117-get_port_num_of_serv_defs (lang)1118- char *lang;1119+get_port_num_of_serv_defs(char *lang)1120{1121char *port_char;1122112311241125