Path: blob/main/japanese/FreeWnn-server/files/patch-Wnn-jlib-js.c
16461 views
Index: Wnn/jlib/js.c1===================================================================2RCS file: /home/cvs/private/hrs/freewnn/Wnn/jlib/js.c,v3retrieving revision 1.1.1.14retrieving revision 1.35diff -u -p -r1.1.1.1 -r1.36--- Wnn/jlib/js.c 20 Dec 2008 07:13:30 -0000 1.1.1.17+++ Wnn/jlib/js.c 2 Jan 2010 11:51:21 -0000 1.38@@ -110,8 +110,7 @@ static WNN_JSERVER_ID *current_js = NULL910/* Packet Buffers */11static unsigned char snd_buf[S_BUF_SIZ]; /** ���� **/12-static int sbp = 0; /** �����Хåե����ݥ��� **/13-static int rbc = -1; /** �����Хåե����ݥ��� **/14+static unsigned char *sbp = snd_buf;1516#if defined(EAGAIN)17# if defined(EWOULDBLOCK)18@@ -130,11 +129,10 @@ static int rbc = -1;19static void connect_timeout ();20static int _get_server_name ();21static int writen ();22+static int rcv_flush();23static char *get_unixdomain_of_serv_defs (), *get_service_of_serv_defs ();24static int get_port_num_of_serv_defs ();25-#if DEBUG26void xerror ();27-#endif2829/********* V4 *****************/30/***31@@ -192,471 +190,506 @@ daemon_dead ()32(cd�Ȥ����Τϥ��ߥ�˥��������ǥХ�����̾��)33**/34static int35-cd_open_un (lang)36- register char *lang;37+cd_open_un(const char *lang)38{39-#ifdef AF_UNIX40- int sd;41- struct sockaddr_un saddr; /** �����å� **/42- char *sock_name = NULL;43- saddr.sun_family = AF_UNIX;44-45- /* find socket name from table by lang */46- if (lang && *lang)47- {48- if ((sock_name = get_unixdomain_of_serv_defs (lang)) == NULL)49- {50- sock_name = sockname;51- }52- }53- else54- {55- sock_name = sockname; /* Jserver */56- }57- strcpy (saddr.sun_path, sock_name);58+#if !defined(AF_UNIX)59+ return -1;60+#else61+ int sd;62+ struct sockaddr_un saddr;63+ char *sock_name = NULL;64+ saddr.sun_family = AF_UNIX;65+66+ /* find socket name from table by lang */67+ if (lang && *lang) {68+ if ((sock_name = get_unixdomain_of_serv_defs(lang)) == NULL)69+ sock_name = sockname;70+ } else71+ sock_name = sockname; /* Jserver */72+ strcpy (saddr.sun_path, sock_name);7374- if ((sd = socket (AF_UNIX, SOCK_STREAM, 0)) == ERROR)75- {76+ if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == ERROR) {77#if DEBUG78- xerror ("jslib:Can't create unix domain socket.\n");79-#endif80- return -1;81- }82+ xerror ("jslib:Can't create unix domain socket.\n");83+#endif /* DEBUG */84+ return -1;85+ }8687#if !defined(SUN_LEN)88# define SUN_LEN(su) (sizeof(*(su)) - sizeof((su)->sun_path) + strlen((su)->sun_path))89-#endif90- if (connect (sd, (struct sockaddr *) &saddr, SUN_LEN (&saddr)) == ERROR)91- {92-93+#endif /* !defined(SUN_LEN) */94+ if (connect(sd, (struct sockaddr *)&saddr, SUN_LEN(&saddr)) == ERROR) {95#if DEBUG96- xerror ("jslib:Can't connect unix domain socket.\n");97-#endif98- close (sd);99- return -1;100- }101- return sd;102-#else103- return -1;104+ xerror ("jslib:Can't connect unix domain socket.\n");105+#endif /* DEBUG */106+ close (sd);107+ return -1;108+ }109+110+ return sd;111#endif112}113114static int115-cd_open_in (server, lang, timeout)116- register char *server;117- register char *lang;118- register int timeout;119-{120- int sd;121-#ifdef INET6122- struct addrinfo hints, *res, *res0;123- int error;124- char sport[6];125-#else126- struct sockaddr_in saddr_in; /** �����å� **/127- register struct hostent *hp;128-#endif129- struct servent *sp = NULL;130- int serverNO, port_num;131- int ret;132- char pserver[64];133- char sserver[64];134- char *serv_name = NULL;135-136- serverNO = _get_server_name (server, pserver);137+cd_open_in(const char *server,138+ const char *lang,139+ const int timeout)140+{141+ int sd;142+143+ struct addrinfo hints, *res, *res0;144+ struct sockaddr sa;145+ char sbuf[NI_MAXSERV];146+147+ int error;148+149+ struct servent *sp = NULL;150+ int serverNO, port_num;151+ int ret;152+ char pserver[NI_MAXHOST];153+ char sserver[NI_MAXHOST];154+ char *serv_name = NULL;155156- /* find service name from table by lang */157- if (lang && *lang)158- {159- if ((serv_name = get_service_of_serv_defs (lang)) == NULL)160- {161- strcpy (sserver, SERVERNAME);162- }163- else164- {165- strcpy (sserver, serv_name);166- }167- }168- else169- {170-/*171- serv_name = SERVERNAME;172-*/173- strcpy (sserver, SERVERNAME);174- }175-/*176- if ((sp = getservbyname(serv_name,"tcp")) != NULL) {177-*/178- if ((sp = getservbyname (sserver, "tcp")) != NULL)179- {180- serverNO += ntohs (sp->s_port);181- }182- else183- {184- if ((port_num = get_port_num_of_serv_defs (lang)) == -1)185- {186- serverNO += WNN_PORT_IN;187- }188- else189- {190- serverNO += port_num;191- }192- }193-#ifdef INET6194- memset(&hints, 0, sizeof(hints));195- hints.ai_family = PF_UNSPEC;196- hints.ai_socktype = SOCK_STREAM;197- sprintf(sport, "%d", serverNO);198- error = getaddrinfo(pserver, sport, &hints, &res0);199- if (error)200- {201#if DEBUG202- xerror (gai_strerror(error));203+ fprintf(stderr, "cd_open_in: Enter: server=%s, lang=%s\n",204+ server, lang);205#endif206- return -1;207- }208- for (res = res0; res ; res = res->ai_next) {209- if (res->ai_family == AF_INET || res->ai_family == AF_INET6){210- if ((sd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) != ERROR){211-#else212- if ((hp = gethostbyname (pserver)) == NULL)213- {214- return -1;215- }216- bzero ((char *) &saddr_in, sizeof (saddr_in));217- bcopy (hp->h_addr, (char *) &saddr_in.sin_addr, hp->h_length);218- saddr_in.sin_family = AF_INET;219- saddr_in.sin_port = htons (serverNO);220- if ((sd = socket (AF_INET, SOCK_STREAM, 0)) == ERROR)221- {222+ serverNO = _get_server_name(server, pserver);223#if DEBUG224- xerror ("jslib:Can't create inet socket.\n");225+ fprintf(stderr, "cd_open_in: serverNO=%d\n", serverNO);226#endif227- return -1;228- }229+ /* find service name from table by lang */230+ if (lang && *lang) {231+ if ((serv_name = get_service_of_serv_defs (lang)) == NULL) {232+ strncpy (sserver, SERVERNAME, sizeof(sserver) - 1);233+ sserver[sizeof(sserver) - 1] = '\0';234+ } else {235+ strncpy (sserver, serv_name, sizeof(sserver) - 1);236+ sserver[sizeof(sserver) - 1] = '\0';237+ }238+ } else {239+ strncpy (sserver, SERVERNAME, sizeof(sserver) - 1);240+ sserver[sizeof(sserver) - 1] = '\0';241+ }242+243+ memset(&sa, 0, sizeof(struct sockaddr));244+ error = getnameinfo(&sa, sa.sa_len,245+ NULL, 0, sbuf, sizeof(sbuf), NI_NUMERICSERV);246+ if (!error) {247+ serverNO += atoi(sbuf);248+ } else {249+ if ((port_num = get_port_num_of_serv_defs (lang)) == -1)250+ serverNO += WNN_PORT_IN;251+ else252+ serverNO += port_num;253+ }254+#if DEBUG255+ fprintf(stderr, "cd_open_in: fixed serverNO=%d\n", serverNO);256#endif257-258- if (timeout != 0 && timeout > 0)259- {260- signal (SIGALRM, connect_timeout);261- alarm (timeout);262- }263+ memset(&hints, 0, sizeof(hints));264+ hints.ai_family = PF_UNSPEC;265+ hints.ai_socktype = SOCK_STREAM;266+ sprintf(sbuf, "%d", serverNO);267+268+ error = getaddrinfo(pserver, sbuf, &hints, &res0);269+ if (error) {270+ xerror(gai_strerror(error));271+ return -1;272+ }273+274+ for (res = res0; res ; res = res->ai_next) {275+ switch (res->ai_family) {276+ case AF_INET:277#ifdef INET6278- ret = connect (sd, res->ai_addr, res->ai_addrlen);279-#else280- ret = connect (sd, (struct sockaddr *) &saddr_in, sizeof (saddr_in));281+ case AF_INET6:282#endif283- if (timeout != 0 && timeout > 0)284- {285- alarm (0);286- signal (SIGALRM, SIG_IGN);287- }288- if (ret == ERROR)289- {290-#if DEBUG291+ sd = socket(res->ai_family,292+ res->ai_socktype,293+ res->ai_protocol);294+295+ if (sd == ERROR) {296+ switch (res->ai_family) {297+ case AF_INET:298+ xerror ("jslib:Can't create inet socket.\n");299#ifdef INET6300- if (res->ai_family == AF_INET)301- xerror ("jslib:Can't connect inet socket.\n");302- else if (res->ai_family == AF_INET6)303- xerror ("jslib:Can't connect inet6 socket.\n");304-#else305- xerror ("jslib:Can't connect inet socket.\n");306-#endif307+ case AF_INET6:308+ xerror ("jslib:Can't create inet6 socket.\n");309#endif310+ default:311+ xerror("jslib:Cannot create socket. Unknown socket type.\n");312+ }313+314+ break;315+ }316+ if (timeout) {317+ signal(SIGALRM, connect_timeout);318+ alarm(timeout);319+ }320+ ret = connect(sd,321+ res->ai_addr,322+ res->ai_addrlen);323+ if (timeout) {324+ alarm(0);325+ signal(SIGALRM, SIG_IGN);326+ }327+ if (ret == ERROR) {328+ switch (res->ai_family) {329+ case AF_INET:330+ fprintf(stderr, "jslib:Can't connect inet socket. (sd=%d)\n", sd);331+ break;332+#ifdef INET6333+ case AF_INET6:334+ fprintf(stderr, "jslib:Can't connect inet6 socket. (sd=%d)\n", sd);335+ break;336+#endif337+ default:338+ xerror("jslib:Cannot connect. Unknown socket type.\n");339+ break;340+ }341#ifdef HAVE_CLOSESOCKET342- closesocket (sd);343+ closesocket(sd);344#else345- close (sd);346+ close(sd);347#endif348-#ifdef INET6349- sd = ERROR;350- } else351- break;352- } else {353+ sd = ERROR;354+ }355#if DEBUG356- if (res->ai_family == AF_INET)357- xerror ("jslib:Can't create inet socket.\n");358- else if (res->ai_family == AF_INET6)359- xerror ("jslib:Can't create inet6 socket.\n");360-#endif361- }362- }363- }364- freeaddrinfo(res0);365- if (sd == ERROR) {366+ fprintf(stderr, "connect: sd=%d\n", sd);367#endif368- return -1;369- }370- return sd;371+ freeaddrinfo(res0);372+ return sd;373+ }374+ }375+ freeaddrinfo(res0);376+ return sd;377}378379static void380-connect_timeout ()381+connect_timeout()382{383}384385/* get server name and return serverNo */386static int387-_get_server_name (server, pserver)388- char *server;389- char *pserver;390+_get_server_name(char *server,391+ char *pserver)392{393- register char *p;394+ char *p;395#ifdef INET6396- int len;397+ int len;398399- if (server[0] == '[') {400- p = strchr(server++, ']');401- if (p) {402- len = p-server<64-1?p-server:64-1;403- strncpy(pserver, server, len);404- pserver[len] = '\0';405- } else406- pserver[0] = '\0';407- } else {408+ if (server[0] == '[') {409+ p = strchr(server++, ']');410+ if (p) {411+ len = p-server < NI_MAXHOST - 1 ? p-server : NI_MAXHOST - 1;412+ strncpy(pserver, server, len);413+ pserver[len] = '\0';414+ } else415+ pserver[0] = '\0';416+ } else {417#endif418/* Workaround for pserver buffer overrun : Nov 11,1999 by T.Aono */419- /* assumes pserver[64]. variable length string is not supported. */420- strncpy(pserver, server, 64-1);421- pserver[64-1] = '\0';422- p = pserver;423+ /* assumes pserver[NI_MAXHOST]. variable length string is not supported. */424+ strncpy(pserver, server, NI_MAXHOST - 1);425+ pserver[NI_MAXHOST - 1] = '\0';426+ p = pserver;427#ifdef INET6428- }429+ }430#endif431- for (; *p && *p != ':'; p++);432- if (!*p)433- return (0); /* does not have a colon */434- *p = 0;435- return (atoi (++p));436+437+ for (; *p && *p != ':'; p++);438+ if (!*p) /* does not have a colon */439+ return (0);440+ *p = 0;441+ return (atoi (++p));442}443444/* Packet SND/RCV subroutines */445static void put4com ();446447-/** �ѥ��åȤΥإå��������� **/448+/* send packet header */449static void450-snd_head (cmd)451- int cmd; /** cmd=���ޥ�� **/452+snd_head(int cmd)453{454- sbp = 0;455- put4com (cmd);456- rbc = -1;457+ sbp = snd_buf;458+ put4com(cmd);459+ rcv_flush();460}461462-/** �ѥ��åȤΥإå��������� **/463+/* send environment header */464static int465-snd_env_head (env, cmd)466- register struct wnn_env *env;467- int cmd; /** cmd=���ޥ�� **/468+snd_env_head (struct wnn_env *env,469+ int cmd)470{471- snd_head (cmd);472- put4com (env->env_id);473- return 0;474+ snd_head(cmd);475+ put4com(env->env_id);476+ return 0;477}478479-/** �ѥ��åȤΥإå��������� **/480+/* send server header */481static int482-snd_server_head (server, cmd)483- register WNN_JSERVER_ID *server;484- int cmd; /** cmd=���ޥ�� **/485+snd_server_head(WNN_JSERVER_ID *server,486+ int cmd)487{488- snd_head (cmd);489- return 0;490+ snd_head(cmd);491+ return 0;492}493494-/** �����Хåե���ե�å��夹�� **/495+/* flush send buffer */496static int497-snd_flush ()498+snd_flush()499{500- if (sbp == 0)501- return (-1);502- writen (sbp);503- sbp = 0;504- return (0);505+ /* empty buffer; no need to flush */506+ if (sbp == snd_buf)507+ return 0;508+509+ writen(sbp);510+ return 0;511}512513+/* send data */514static int515-writen (n)516- int n;517+writen(unsigned char *sp)518{519- int cc, x;520- for (cc = 0; cc < n;)521- {522- errno = 0;523+ unsigned char *bp = snd_buf;524+ int n;525+ size_t total = sp - bp;526+527+ while (bp < sp && bp <= snd_buf + sizeof(snd_buf)) {528+#if DEBUG_IO529+ fprintf(stderr,530+ "writen: loop: sp - bp = %d\n", sp - bp);531+#endif532#ifdef HAVE_SEND533- x = send (current_sd, &snd_buf[cc], n - cc, 0);534+ n = send(current_sd, bp, sp - bp, 0);535#else536- x = write (current_sd, &snd_buf[cc], n - cc);537+ n = write(current_sd, bp, sp - bp);538#endif539- if (x < 0)540- {541- if (ERRNO_CHECK (errno) || errno == EINTR)542- {543- continue;544- }545- else546- {547- daemon_dead ();548- return -1;549- }550- }551- cc += x;552- }553-#if DEBUG554- fprintf (stderr, "jslib:writen=%d\n", x);555-/* dmp(snd_buf,x); */556+ if (n < 0) {557+ if (ERRNO_CHECK (errno) || errno == EINTR) {558+ continue;559+ } else {560+#if DEBUG_IO561+ fprintf(stderr,562+ "writen: failed. errno=%d\n", errno);563+#endif564+ daemon_dead();565+ return -1;566+ }567+ }568+ bp += n;569+ }570+ sbp = snd_buf;571+#if DEBUG_IO572+ fprintf (stderr, "jslib:writen=%d\n", total);573#endif574- return (0);575+ return 0;576}577578-/** �����Ф�1�Х������� **/579+/* send one byte to server */580static void581-put1com (c)582- int c;583+put1com(int c)584{585- snd_buf[sbp++] = c;586- if (sbp >= S_BUF_SIZ)587- {588- writen (S_BUF_SIZ);589- sbp = 0;590- }591+ unsigned int data = c & 0xff;592+593+#if DEBUG_IO594+ fprintf(stderr, "put1com: [%02x]\n", data);595+#endif596+597+ /* flush buffer if full */598+ if (sbp - snd_buf >= S_BUF_SIZ) {599+ writen(sbp);600+ }601+ *(sbp++) = data;602}603604-/** �����Ф�2�Х������� **/605+/* send two bytes */606static void607-put2com (c)608- int c;609+put2com(int c)610{611- put1com (c >> (8 * 1));612- put1com (c);613+ unsigned int data = c & 0xffff;614+#if DEBUG_IO615+ fprintf(stderr, "put2com: [%04x]\n", data);616+#endif617+ put1com(data >> (8 * 1));618+ put1com(data);619}620621-/** �����Ф�4�Х������� **/622+/* send four bytes */623static void624-put4com (c)625- int c;626+put4com(int c)627{628- put1com (c >> (8 * 3));629- put1com (c >> (8 * 2));630- put1com (c >> (8 * 1));631- put1com (c);632+ unsigned int data = c & 0xffffffff;633+#if DEBUG_IO634+ fprintf(stderr, "put4com: [%08x]\n", data);635+#endif636+ put1com(data >> (8 * 3));637+ put1com(data >> (8 * 2));638+ put1com(data >> (8 * 1));639+ put1com(data);640}641642-/** �����Ф�ʸ��������� **/643+/* send w_char string */644static void645-putwscom (p)646- register w_char *p;647+putwscom(w_char *p)648{649- if (p == NULL)650- {651- put2com (0);652- return;653- }654- while (*p)655- put2com (*p++);656- put2com (0);657+ if (p == NULL) {658+ put2com(0x0000);659+ return;660+ }661+662+#if DEBUG_IO663+ fprintf(stderr, "putwscom: [%s]\n", p);664+#endif665+ while(*p)666+ put2com (*p++);667+ put2com(0x0000);668}669670-/** �����Ф�ʸ��������� **/671+/* send string */672static void673-putscom (p)674- register char *p;675+putscom(unsigned char *p)676{677- if (p == NULL)678- {679- put1com (0);680- return;681- }682- while (*p)683- put1com (*p++);684- put1com (0);685-}686+ if (p == NULL) {687+ put1com(0x00);688+ return;689+ }690+#if DEBUG_IO691+ fprintf(stderr, "putscom: [%s]\n", p);692+#endif693+ while (*p)694+ put1com(*p++);695+ put1com(0);696+}697+698+static unsigned char rcv_buf[R_BUF_SIZ];699+static unsigned char *rbp = rcv_buf;700+static unsigned char *rp = rcv_buf;701702-/** �����Ф���1�Х��ȼ����� **/703static int704-get1com ()705+rcv_flush()706{707- static int rbp;708- static unsigned char rcv_buf[R_BUF_SIZ]; /** ���� **/709- if (rbc <= 0)710- {711- while (1)712- {713- errno = 0;714-#ifdef HAVE_RECV715- rbc = recv (current_sd, rcv_buf, R_BUF_SIZ, 0);716-#else717- rbc = read (current_sd, rcv_buf, R_BUF_SIZ);718-#endif719- if (rbc <= 0)720- {721- if (ERRNO_CHECK (errno))722- {723- continue;724- }725- else if (rbc == 0)726- {727- daemon_dead ();728- return -1;729- }730- else731- { /* cc == -1 */732- if (errno != EINTR)733- {734- daemon_dead ();735- return -1;736- }737- continue;738- }739- }740- rbp = 0;741-#if DEBUG742- fprintf (stderr, "jslib:read:rbc=%d\n", rbc);743-/* dmp(rcv_buf,rbc); */744+#if DEBUG_IO745+ fprintf(stderr, "rcv_flush\n");746#endif747- break;748- }749- }750- rbc--;751- return rcv_buf[rbp++] & 0xFF;752+ rbp = rp = &rcv_buf[0];753+ return 0;754}755756-/** �����Ф���2�Х��ȼ����� **/757-static int758-get2com ()759+static unsigned int760+get1com()761{762- register int h;763- h = get1com ();764- return (h << 8) | get1com ();765-}766+ int n;767768-/** �����Ф���4�Х��ȼ����� **/769-static int770-get4com ()771-{772- register int h1, h2, h3;773- h1 = get1com () << 24;774- h2 = get1com () << 16;775- h3 = get1com () << 8;776- return h1 | h2 | h3 | get1com ();777+#if DEBUG_IO778+ fprintf(stderr, "get1com: Enter\n");779+#endif780+ if (rp == rbp) {781+ /* rp == rbp case; no data in rcv_buf */782+783+ rbp = rp = rcv_buf;784+785+ while (rbp == rp) {786+ errno = 0;787+#ifdef HAVE_RECV788+ n = recv(current_sd, rcv_buf, sizeof(rcv_buf), 0);789+#else790+ n = read(current_sd, rcv_buf, sizeof(rcv_buf));791+#endif792+#if DEBUG_IO793+ fprintf(stderr, "recvloop: n=%d\n", n);794+#endif795+ if (n == 0) {796+ if (ERRNO_CHECK(errno)) {797+ continue;798+ } else {799+ daemon_dead();800+ return -1;801+ }802+ }803+ if (n < 0) {804+ if (ERRNO_CHECK(errno) || errno == EINTR) {805+ continue;806+ } else {807+ daemon_dead();808+ return -1;809+ }810+ }811+ rp += n;812+ }813+#if DEBUG_IO814+ fprintf (stderr, "jslib:read:rp - rbp =%d\n", rp - rbp);815+#endif816+ }817+818+#if DEBUG_IO819+ fprintf(stderr, "get1com: data [%02x]\n", *rbp & 0xff);820+821+ fprintf(stderr, "rcv_buf: ");822+ {823+ int i;824+ for (i=0; i < rp - rbp; i++) {825+ fprintf(stderr, "[%02x]", *(rbp + i));826+ }827+ fprintf(stderr, "\n");828+ }829+#endif830+ return (*(rbp++) & 0xff);831+}832+833+/* get two bytes */834+static unsigned int835+get2com()836+{837+ unsigned int h;838+#if DEBUG_IO839+ fprintf(stderr, "get2com: Enter\n");840+#endif841+ h = get1com() << 8;842+ h |= get1com();843+844+#if DEBUG_IO845+ fprintf(stderr, "get2com: [%04x]\n", h);846+#endif847+ return h;848+}849+850+/* get four bytes */851+static unsigned int852+get4com()853+{854+ unsigned int h;855+#if DEBUG_IO856+ fprintf(stderr, "get4com: Enter\n");857+#endif858+ h = get1com() << 24;859+ h |= get1com() << 16;860+ h |= get1com() << 8;861+ h |= get1com();862+#if DEBUG_IO863+ fprintf(stderr, "get4com: [%08x]\n", h);864+#endif865+ return h;866}867868-/** �����Ф�ʸ��������� **/869+/* get string */870static void871-getscom (p)872- register char *p;873+getscom(unsigned char *p)874{875- while (*p++ = get1com ())876- ;877+ unsigned char *bp = p;878+ while (*p++ = get1com())879+ ;880+#if DEBUG_IO881+ fprintf(stderr, "getscom: [%s]\n", bp);882+#endif883}884885-/** �����Ф�ʸ��������� **/886+/* get wstring */887static void888-getwscom (p)889- w_char register *p;890+getwscom(w_char *p)891{892- while (*p++ = get2com ())893- ;894+ while (*p++ = get2com ())895+ ;896}897898#ifdef nodef899@@ -687,7 +720,6 @@ Strcpy (s1, s2)900901902/* Debug Subroutines */903-#if DEBUG904void905xerror (s)906char *s;907@@ -716,8 +748,6 @@ dmp (p, c)908}909}910911-#endif912-913/* get login name form /etc/passwd file */914static char *915getlogname ()916@@ -741,87 +771,104 @@ getlogname ()917918/** jserver ����³���롣jserver_id ���֤��� **/919WNN_JSERVER_ID *920-js_open_lang (server, lang, timeout)921- register char *server, *lang;922- register int timeout;923-{924- char *new_js;925- char host[WNN_HOSTLEN], user[WNN_ENVNAME_LEN];926- int x;927+js_open_lang (char *server,928+ char *lang,929+ int timeout)930+{931+ char *new_js;932+ char host[WNN_HOSTLEN];933+ char user[WNN_ENVNAME_LEN];934+ int x;935+936+ if (wnn_msg_cat == NULL) {937+ char nlspath[MAXPATHLEN];938+ strcpy (nlspath, LIBDIR);939+ strcat (nlspath, "/%L/%N");940+ wnn_msg_cat = msg_open ("libwnn.msg", nlspath, lang);941+ if (wnn_msg_cat == NULL) {942+ fprintf (stderr,943+ "libwnn: Cannot open message file for libwnn.a\n");944+ }945+ }946+947+ if (!(new_js = (char *) malloc (sizeof (WNN_JSERVER_ID)))) {948+ wnn_errorno = WNN_ALLOC_FAIL;949+ return NULL;950+ }951+952+ current_js = (WNN_JSERVER_ID *) new_js;953+ if (server == NULL) {954+ current_js->js_name[0] = '\0';955+ } else {956+ strncpy(current_js->js_name, server, sizeof (current_js->js_name) - 1);957+ current_js->js_name[sizeof (current_js->js_name) - 1] = '\0';958+ }959960- if (wnn_msg_cat == NULL)961- {962- char nlspath[MAXPATHLEN];963- strcpy (nlspath, LIBDIR);964- strcat (nlspath, "/%L/%N");965- wnn_msg_cat = msg_open ("libwnn.msg", nlspath, lang);966- if (wnn_msg_cat == NULL)967- {968- fprintf (stderr, "libwnn: Cannot open message file for libwnn.a\n");969- }970- }971- sbp = 0; /* init sndBufPointer */972- if (!(new_js = (char *) malloc (sizeof (WNN_JSERVER_ID))))973- {974- wnn_errorno = WNN_ALLOC_FAIL;975- return NULL;976- }977- current_js = (WNN_JSERVER_ID *) new_js;978- if (server == NULL)979- {980- current_js->js_name[0] = '\0';981- }982- else983- {984- strncpy (current_js->js_name, server, sizeof (current_js->js_name) - 1);985- current_js->js_name[sizeof (current_js->js_name) - 1] = '\0';986- }987- current_js->js_dead = 0;988- current_js->js_dead_env_flg = 0;989+ current_js->js_dead = 0;990+ current_js->js_dead_env_flg = 0;991/*992if(user == NULL || 0==strcmp(user,""))993*/994- strncpy (user, getlogname (), WNN_ENVNAME_LEN);995- user[WNN_ENVNAME_LEN - 1] = '\0'; /* truncate by WNN_ENVNAME_LEN */996- if (server == NULL || 0 == strcmp (server, "") || 0 == strcmp (server, "unix"))997- {998- strcpy (host, "unix");999- if ((current_sd = cd_open_un (lang)) == -1)1000- {1001- wnn_errorno = WNN_SOCK_OPEN_FAIL;1002- free ((char *) current_js);1003- current_js = NULL;1004- return NULL;1005- }1006- }1007- else1008- {1009- gethostname (host, WNN_HOSTLEN);1010- host[WNN_HOSTLEN - 1] = '\0'; /* truncate by WNN_HOSTLEN */1011- if ((current_sd = cd_open_in (server, lang, timeout)) == -1)1012- {1013- wnn_errorno = WNN_SOCK_OPEN_FAIL;1014- free ((char *) current_js);1015- current_js = NULL;1016- return NULL;1017- }1018- }1019- current_js->sd = current_sd;1020- handler_of_jserver_dead (NULL);1021- snd_head (JS_OPEN);1022- put4com (JLIB_VERSION); /* H.T. */1023- putscom (host);1024- putscom (user);1025- snd_flush ();1026- if (get4com () == -1)1027- {1028- x = wnn_errorno = get4com ();1029- js_close (current_js); /* H.T. */1030- current_js = NULL;1031- wnn_errorno = x;1032- return NULL;1033- }1034- return current_js;1035+ strncpy(user, getlogname (), WNN_ENVNAME_LEN);1036+ user[WNN_ENVNAME_LEN - 1] = '\0'; /* truncate by WNN_ENVNAME_LEN */1037+1038+#if DEBUG1039+ fprintf(stderr, "js_open_lang: server: %s\n", server);1040+#endif1041+ if (server == NULL1042+ || 0 == strcmp(server, "")1043+ || 0 == strcmp(server, "unix")) {1044+ strcpy(host, "unix");1045+ if ((current_sd = cd_open_un(lang)) == -1) {1046+ wnn_errorno = WNN_SOCK_OPEN_FAIL;1047+ free ((char *) current_js);1048+ current_js = NULL;1049+ return NULL;1050+ }1051+ } else {1052+ gethostname (host, WNN_HOSTLEN);1053+ host[WNN_HOSTLEN - 1] = '\0'; /* truncate by WNN_HOSTLEN */1054+#if DEBUG1055+ fprintf(stderr, "js_open_lang: before cd_open_in\n");1056+#endif1057+ if ((current_sd = cd_open_in(server, lang, timeout)) == -1) {1058+ wnn_errorno = WNN_SOCK_OPEN_FAIL;1059+ free((char *)current_js);1060+ current_js = NULL;1061+#if DEBUG1062+ fprintf(stderr, "js_open_lang: cd_open_in failed\n");1063+#endif1064+ return NULL;1065+ }1066+#if DEBUG1067+ fprintf(stderr, "js_open_lang: after cd_open_in\n");1068+#endif1069+ }1070+1071+#if DEBUG1072+ fprintf(stderr, "current_sd=%d\n", current_sd);1073+#endif1074+ current_js->sd = current_sd;1075+ handler_of_jserver_dead (NULL);1076+ snd_head(JS_OPEN);1077+ put4com(JLIB_VERSION); /* H.T. */1078+ putscom(host);1079+ putscom(user);1080+ snd_flush();1081+1082+#if DEBUG1083+ fprintf(stderr, "cd_open_in: before get4com\n");1084+#endif1085+1086+ if (get4com() == -1) {1087+ x = wnn_errorno = get4com ();1088+ js_close(current_js); /* H.T. */1089+ current_js = NULL;1090+ wnn_errorno = x;1091+ return NULL;1092+ }1093+1094+ return current_js;1095}109610971098@@ -2988,29 +3035,25 @@ get_serv_defs (lang, cnt)1099}11001101char *1102-_wnn_get_machine_of_serv_defs (lang)1103- char *lang;1104+_wnn_get_machine_of_serv_defs(char *lang)1105{1106return (get_serv_defs (lang, MACHINE_NAME));1107}11081109static char *1110-get_unixdomain_of_serv_defs (lang)1111- char *lang;1112+get_unixdomain_of_serv_defs(char *lang)1113{1114return (get_serv_defs (lang, UNIXDOMAIN_NAME));1115}11161117static char *1118-get_service_of_serv_defs (lang)1119- char *lang;1120+get_service_of_serv_defs(char *lang)1121{1122return (get_serv_defs (lang, SERVICE_NAME));1123}11241125static int1126-get_port_num_of_serv_defs (lang)1127- char *lang;1128+get_port_num_of_serv_defs(char *lang)1129{1130char *port_char;1131113211331134