[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freewnn:00919] Re: defect in Japanese conversion
小野寛生です
At Sun, 08 Sep 2002 16:27:02 +0900,
Hiroo Ono wrote:
> Wnn/jserver/fzk.c で malloc で確保している領域を zero clear するように
> したら、正常に変換出来るようになりました。
> もうちょっときちんと見てから、次の休みまでには修正を commit します。
修正の前段階で、スタイル+コンパイラの warning に対する修正です。
(malloc の暫定対処も入っていますが、commit の際はそこは戻すつもり)。
local の cvs repo. に対する差分ですが、多分 cvs の最新のものに問題なく
あたるかと思います。
いつもは、make が通って起動出来たらつっこんでしまっているのですが、
- fzk_orvt (&fzkwk[point + n], &(fzkinfp->vector[0]));
+ fzk_orvt (fzkwk[point + n].vector, &(fzkinfp->vector[0]));
といった struct FT, kangovect 関連の修正が一寸心配なので、review
お願いします。
明日、これでうまく動くのを確認したら、malloc 関連の修正を除いた部分を
まず commit してから、malloc 周りを見直して、と2段階で commit する予
定です。
他には、変更点が大きくなるので、release した後でいじるつもりではいます
が、struct JT と、readfile.c の *_realloc() 関連で変更を提案したいと
考えています。
% 変更点が多い割に、動きは全然変わらないのですが。
Index: ddefine.h
===================================================================
RCS file: /build/cvsroot/FreeWnn/Wnn/jserver/ddefine.h,v
retrieving revision 1.2
diff -u -r1.2 ddefine.h
--- ddefine.h 4 Aug 2002 10:40:37 -0000 1.2
+++ ddefine.h 10 Sep 2002 14:48:17 -0000
@@ -190,7 +190,7 @@
/* 幹語の前端接続ベクトルの構造 */
struct kangovect
{
- unsigned int vector[VECT_L]; /* 幹語ベクトル */
+ int vector[VECT_L]; /* 幹語ベクトル */
};
struct SYO_BNSETSU
Index: fzk.c
===================================================================
RCS file: /build/cvsroot/FreeWnn/Wnn/jserver/fzk.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 fzk.c
--- fzk.c 13 Jun 2002 20:45:13 -0000 1.1.1.1
+++ fzk.c 10 Sep 2002 17:00:51 -0000
@@ -1,8 +1,4 @@
/*
- * $Id: fzk.c,v 1.1.1.1 2002/06/13 20:45:13 hiroo Exp $
- */
-
-/*
* FreeWnn is a network-extensible Kana-to-Kanji conversion system.
* This file is part of FreeWnn.
*
@@ -28,6 +24,9 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+
+static char rcs_id[] = "$Id: fzk.c,v 1.1.1.1 2002/06/13 20:45:13 hiroo Exp $";
+
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
@@ -35,6 +34,7 @@
#include <stdio.h>
#if STDC_HEADERS
# include <stdlib.h>
+# include <string.h>
#else
# if HAVE_MALLOC_H
# include <malloc.h>
@@ -50,12 +50,21 @@
#define vungetc(k, pt) {if(pt) {ungetc((k),(pt));}else{xungetc_cur(k);}}
#ifndef NO_FZK
-static void link_job ();
-static int fzk_ken (), setfzk ();
-static struct fzkentry *bsrch ();
+static void link_job (int, struct FT *);
+static int fzk_ken (w_char *, w_char *, int *, struct fzkken *);
+static int setfzk (struct fzkentry *, struct fzkken **, int *, int);
+static struct fzkentry *bsrch (w_char *);
#endif
-static void fzk_orvt ();
-static int fzk_ck_vector (), bittest (), get_decimal (), check_eof (), get_hexsa (), get_string (), check_eof (), kng_ckvt ();
+static int kng_ckvt (int *, int);
+static int fzk_ck_vector (int *);
+static void fzk_orvt (int *, int *);
+static int bittest (int *, int);
+static int error_fzk (void);
+static int error_eof (void);
+static int get_decimal (FILE *);
+static int get_hexsa (FILE *);
+static int get_string (FILE *, unsigned char *);
+static int check_eof (FILE *);
#ifndef NO_FZK
static int fzkvect_kosuu; /* 付属語ベクタ数 */
@@ -106,8 +115,7 @@
struct FT *
-fzk_read (fp)
- register FILE *fp;
+fzk_read (FILE *fp)
{
struct FT *fzk_tbl;
@@ -122,12 +130,11 @@
}
struct FT *
-fzk_ld (fp)
- register FILE *fp;
+fzk_ld (FILE *fp)
{
struct FT *fzk_tbl;
- register int k, l, m;
- register int vect_count = 0;
+ int k, l, m;
+ int vect_count = 0;
#ifndef NO_FZK
struct fzkentry *ptr;
unsigned char charyomi[(YOMI_L + 1) * 2];
@@ -150,24 +157,24 @@
if (fzkvect_l > VECT_L)
{
wnn_errorno = WNN_FZK_TOO_DEF;
- error1 ("Sorry, your fuzokugo bit data has too many id.\n");
- error1 ("Please change define VECT_L %d and compile again\n", fzkvect_l);
+ log_err ("Sorry, your fuzokugo bit data has too many id.");
+ log_err ("Please change define VECT_L %d and compile again.", fzkvect_l);
return (NULL);
}
if (kango_vect_l > KANGO_VECT_L)
{
wnn_errorno = WNN_FZK_TOO_DEF;
- error1 ("Sorry, your kango bit data has too many id.\n");
- error1 ("Please change define KANGO_VECT_L %d and compile again\n", kango_vect_l);
+ log_err ("Sorry, your kango bit data has too many id.");
+ log_err ("Please change define KANGO_VECT_L %d and compile again.", kango_vect_l);
return (NULL);
}
#ifdef nodef /* This check doesn't need anymore. KUWARI */
if (kango_vect_kosuu > KANGO_VECT_KOSUU)
{
wnn_errorno = WNN_FZK_TOO_DEF;
- error1 ("Sorry, your kango bit vector has too many id.\n");
- error1 ("Please change define KANGO_VECT_KOSUU %d and compile again\n", kango_vect_kosuu);
+ log_err ("Sorry, your kango bit vector has too many id.");
+ log_err ("Please change define KANGO_VECT_KOSUU %d and compile again.", kango_vect_kosuu);
return (NULL);
}
#endif
@@ -175,22 +182,25 @@
if (kango_length > KANGO_HINSI_MX)
{
wnn_errorno = WNN_FZK_TOO_DEF;
- error1 ("Sorry, your kango bit data has too many id.\n");
- error1 ("Please change define KANGO_MX %d and compile again\n", kango_length);
+ log_err ("Sorry, your kango bit data has too many id.");
+ log_err ("Please change define KANGO_MX %d and compile again.", kango_length);
return (NULL);
}
if (kango_vect_kosuu > kango_length)
{
wnn_errorno = WNN_FZK_TOO_DEF;
- error1 ("KANGO vector kosuu is more than KANGO hinsi suu\n");
+ log_err ("KANGO vector kosuu is more than KANGO hinsi suu.");
return (NULL);
}
if ((fzk_tbl = (struct FT *) malloc (sizeof (struct FT))) == NULL)
{
wnn_errorno = WNN_MALLOC_ERR;
- error1 ("malloc error in fzk\n");
+ log_err ("fzk_ld: malloc error.");
return (NULL);
}
+ /* b MALLOC DEBUG */
+ bzero (fzk_tbl, sizeof (struct FT));
+ /* e MALLOC DEBUG */
fzk_tbl->kango_hinsi_area = NULL;
fzk_tbl->kango_vect_area = NULL;
fzk_tbl->fzkvect_l = fzkvect_l;
@@ -200,35 +210,43 @@
fzk_tbl->tablefuzokugo = NULL;
fzk_tbl->fzklength = fzklength;
- if ((fzk_tbl->vect_area = (struct fzkvect *) malloc (sizeof (struct fzkvect) * fzkvect_kosuu)) == NULL)
+ /* MALLOC DEBUG */
+ /* if ((fzk_tbl->vect_area = (struct fzkvect *) malloc (sizeof (struct fzkvect) * fzkvect_kosuu)) == NULL) */
+ if ((fzk_tbl->vect_area = (struct fzkvect *) calloc (fzkvect_kosuu, sizeof (struct fzkvect))) == NULL)
{
wnn_errorno = WNN_MALLOC_ERR;
- error1 ("malloc error in fzk\n");
+ log_err ("fzk_ld: malloc error.");
fzk_discard (fzk_tbl);
return (NULL);
}
#endif /* NO_FZK */
- if ((fzk_tbl->kango_hinsi_area = (int *) malloc (sizeof (int) * kango_length)) == NULL)
+ /* MALLOC DEBUG */
+ /* if ((fzk_tbl->kango_hinsi_area = (int *) malloc (sizeof (int) * kango_length)) == NULL) */
+ if ((fzk_tbl->kango_hinsi_area = (int *) calloc (kango_length, sizeof (int))) == NULL)
{
wnn_errorno = WNN_MALLOC_ERR;
error1 ("malloc error in fzk\n");
fzk_discard (fzk_tbl);
return (NULL);
}
- if ((fzk_tbl->kango_vect_area = (struct kangovect *) malloc (sizeof (struct kangovect) * (kango_vect_kosuu + SV_KOSUU))) == NULL)
+ /* MALLOC DEBUG */
+ /* if ((fzk_tbl->kango_vect_area = (struct kangovect *) malloc (sizeof (struct kangovect) * (kango_vect_kosuu + SV_KOSUU))) == NULL) */
+ if ((fzk_tbl->kango_vect_area = (struct kangovect *) calloc ((kango_vect_kosuu + SV_KOSUU), sizeof (struct kangovect))) == NULL)
{
wnn_errorno = WNN_MALLOC_ERR;
- error1 ("malloc error in fzk\n");
+ log_err ("fzk_ld: malloc error.");
fzk_discard (fzk_tbl);
return (NULL);
}
#ifndef NO_FZK
- if ((fzk_tbl->tablefuzokugo = (struct fzkentry *) malloc (sizeof (struct fzkentry) * fzk_tbl->fzklength)) == NULL)
+ /* MALLOC DEBUG */
+ /* if ((fzk_tbl->tablefuzokugo = (struct fzkentry *) malloc (sizeof (struct fzkentry) * fzk_tbl->fzklength)) == NULL) */
+ if ((fzk_tbl->tablefuzokugo = (struct fzkentry *) calloc (fzk_tbl->fzklength, sizeof (struct fzkentry))) == NULL)
{
wnn_errorno = WNN_MALLOC_ERR;
- error1 ("malloc error in fzk\n");
+ log_err ("fzk_ld: malloc error.");
fzk_discard (fzk_tbl);
return (NULL);
}
@@ -343,16 +361,15 @@
#ifdef nodef
void
-giji_hinsi_err (str)
- char *str;
+giji_hinsi_err (char *str)
{
wnn_errorno = WNN_GIJI_HINSI_ERR;
- error1 ("GIJI hinsi (%s) is not defined in hinsi data file.\n", str);
+ log_err ("GIJI hinsi (%s) is not defined in hinsi data file.", str);
}
#endif /* nodef */
+
void
-fzk_discard (fzk_tbl)
- struct FT *fzk_tbl;
+fzk_discard (struct FT *fzk_tbl)
{
if (fzk_tbl->kango_hinsi_area != NULL)
free (fzk_tbl->kango_hinsi_area);
@@ -369,12 +386,10 @@
#ifndef NO_FZK
static void
-link_job (x, fzk_tbl)
- register int x;
- struct FT *fzk_tbl;
+link_job (int x, struct FT *fzk_tbl)
{
- register int n;
- register struct fzkentry *pter_a, *pter_b;
+ int n;
+ struct fzkentry *pter_a, *pter_b;
for (pter_a = fzk_tbl->tablefuzokugo, x--, n = 0; n < x; n++, pter_a++)
{
@@ -390,13 +405,11 @@
*/
int
-fzk_kai (start, end, syuutan_vect, syuutan_vect1, ichbnp_p)
- w_char *start; /* string start pointer */
- w_char *end; /* string end pointer */
- int syuutan_vect; /* 文節終端 vector */
- int syuutan_vect1; /* 文節終端 vector 1 */
- struct ICHBNP **ichbnp_p; /* ich-bunpou area 付属語候補 set pointer
- pointer */
+fzk_kai (w_char *start, /* string start pointer */
+ w_char *end, /* string end pointer */
+ int syuutan_vect, /* 文節終端 vector */
+ int syuutan_vect1, /* 文節終端 vector 1 */
+ struct ICHBNP **ichbnp_p) /* ich-bunpou area 付属語候補 set pointer pointer */
{
#ifndef NO_FZK
static struct fzkwork fzkwk[STRK_L + 1]; /* 解析 work area */
@@ -406,12 +419,12 @@
struct fzkken fzkinf[YOMI_L + 1]; /* 検索 work area */
struct fzkken fzkinf1[YOMI_L + 1]; /* 検索 work area */
struct fzkken *fzkinfp;
- struct ICHBNP *getibsp ();
- struct ICHBNP *ichbnptr, *wkptr;
+ struct ICHBNP *ichbnptr = NULL;
+ struct ICHBNP *wkptr = NULL;
- register int point; /* index */
- register int i, j; /* work index */
- register int cnt, n; /* counter */
+ int point; /* index */
+ int i, j; /* work index */
+ int cnt, n; /* counter */
struct kangovect *endvect; /* 文節終端 vector pointer */
struct kangovect *endvect1; /* 文節終端 vector 1 */
@@ -451,28 +464,28 @@
if (point > STRK_L)
{
wnn_errorno = WNN_WKAREA_FULL;
- error1 ("Fuzokugo-kaiseki area is full");
+ log_err ("fzk_kai: fuzokugo-kaiseki area is full.");
return (-1);
}
- if (fzk_ck_vector (&fzkwk[point]))
+ if (fzk_ck_vector (fzkwk[point].vector))
{
/* 付属語検索 vector */
- fzk_ken (start + point, end, &fzkwk[point], &fzkinf[0]);
+ fzk_ken (start + point, end, fzkwk[point].vector, &fzkinf[0]);
for (fzkinfp = &fzkinf[0]; fzkinfp->ent_ptr; fzkinfp++)
{
n = (fzkinfp->ent_ptr)->yomi_su;
- fzk_orvt (&fzkwk[point + n], &(fzkinfp->vector[0]));
+ fzk_orvt (fzkwk[point + n].vector, &(fzkinfp->vector[0]));
maxpoint = (maxpoint < point + n) ? point + n : maxpoint;
}
}
- if (fzk_ck_vector (&fzkwk1[point]))
+ if (fzk_ck_vector (fzkwk1[point].vector))
{
/* 付属語検索 vector 1 */
- fzk_ken (start + point, end, &fzkwk1[point], &fzkinf1[0]);
+ fzk_ken (start + point, end, fzkwk1[point].vector, &fzkinf1[0]);
for (fzkinfp = &fzkinf1[0]; fzkinfp->ent_ptr; fzkinfp++)
{
n = (fzkinfp->ent_ptr)->yomi_su;
- fzk_orvt (&fzkwk1[point + n], &(fzkinfp->vector[0]));
+ fzk_orvt (fzkwk1[point + n].vector, &(fzkinfp->vector[0]));
maxpoint = (maxpoint < point + n) ? point + n : maxpoint;
}
}
@@ -484,7 +497,8 @@
*/
for (point = cnt = 0, *ichbnp_p = NULL; point <= maxpoint; point++)
{
- if (kng_ckvt (&fzkwk[point], kango_vect_l) || kng_ckvt (&fzkwk1[point], kango_vect_l))
+ if (kng_ckvt (fzkwk[point].vector, kango_vect_l) ||
+ kng_ckvt (fzkwk1[point].vector, kango_vect_l))
{
if (!(n = cnt % FZKIBNO))
{
@@ -493,7 +507,7 @@
if (*ichbnp_p != NULL)
(void) freeibsp (*ichbnp_p);
*ichbnp_p = NULL;
- error1 ("Error in fzk_kai.");
+ log_err ("fzk_kai: error.");
return (-1);
}
else
@@ -516,10 +530,9 @@
}
return (cnt);
#else /* NO_FZK */
- struct ICHBNP *getibsp ();
struct ICHBNP *wkptr;
- register int i; /* work index */
+ int i; /* work index */
struct kangovect *endvect; /* 文節終端 vector pointer */
struct kangovect *endvect1; /* 文節終端 vector 1 */
@@ -536,7 +549,7 @@
{
if ((wkptr = getibsp ()) == NULL)
{
- error1 ("Error in fzk_kai.");
+ log_err ("fzk_kai: error.");
return (-1);
}
else
@@ -561,11 +574,9 @@
*/
static int
-kng_ckvt (vector, kango_vect_l)
- register int *vector;
- register int kango_vect_l;
+kng_ckvt (int *vector, int kango_vect_l)
{
- register int i, rts;
+ int i, rts;
for (rts = 0, i = kango_vect_l; i > 0; i--)
rts |= *vector++; /* OR cheak */
@@ -577,18 +588,17 @@
* fzk_ckvt
*/
int
-fzk_ckvt (vector)
- register int vector;
+fzk_ckvt (int vector)
{
- return vector >= 0 && fzk_ck_vector (&ft->kango_vect_area[vector]);
+ return vector >= 0 &&
+ fzk_ck_vector (&(ft->kango_vect_area)->vector[vector]);
}
static int
-fzk_ck_vector (vector)
- register int *vector;
+fzk_ck_vector (int *vector)
{
- register int i, rts;
+ int i, rts;
rts = *vector++ & ~0x01; /* 「先頭可」のビットを除く */
for (i = ft->fzkvect_l - 1; i > 0; i--)
@@ -602,11 +612,9 @@
*/
static void
-fzk_orvt (vector1, vector2)
- register int *vector1;
- register int *vector2;
+fzk_orvt (int *vector1, int *vector2)
{
- register int i;
+ int i;
for (i = ft->fzkvect_l; i > 0; i--)
*vector1++ |= *vector2++; /* OR set */
@@ -614,16 +622,12 @@
#ifndef NO_FZK
static int
-fzk_ken (start, end, vector, fzkptr)
- w_char *start;
- w_char *end;
- int vector[];
- struct fzkken *fzkptr;
+fzk_ken (w_char *start, w_char *end, int vector[], struct fzkken *fzkptr)
{
- register int yomicnt;
- register int setno;
+ int yomicnt;
+ int setno;
struct fzkken *ansptr;
- register struct fzkentry *search_ptr;
+ struct fzkentry *search_ptr;
w_char key[YOMI_L + 1];
int fzkvect_l = ft->fzkvect_l;
@@ -649,16 +653,15 @@
/******************************************/
static int
-setfzk (entry_ptr, answer_ptr, vector, fzkvect_l)
- struct fzkentry *entry_ptr;
- struct fzkken **answer_ptr;
- int vector[];
- int fzkvect_l;
-{
- register int setno;
- register int vectroop;
- register int wcnt, setflg;
- register struct fzkvect *vect_ptr;
+setfzk (struct fzkentry *entry_ptr,
+ struct fzkken **answer_ptr,
+ int vector[],
+ int fzkvect_l)
+{
+ int setno;
+ int vectroop;
+ int wcnt, setflg;
+ struct fzkvect *vect_ptr;
if (entry_ptr != NULL)
{
@@ -690,11 +693,9 @@
/***************************************************/
static int
-bittest (vector, no)
- int vector[];
- int no;
+bittest (int vector[], int no)
{
- register int wvect;
+ int wvect;
wvect = vector[no / (sizeof (int) << 3)]; /* << 3 == * 8 */
wvect >>= (int) (no % (sizeof (int) << 3));
@@ -705,22 +706,19 @@
}
/*
-int Strncmp(s1,s2,n)
-register w_char *s1;
-register w_char *s2;
-register int n;
+int Strncmp(w_char *s1, w_char *s2, int n)
{
if(n == 0)return(0);
for (;n > 0 && *s1++ == *s2++;n--);
return (int)(*--s1 - *--s2);
}
*/
+
#ifndef NO_FZK
static struct fzkentry *
-bsrch (key_yomi)
- w_char *key_yomi;
+bsrch (w_char *key_yomi)
{
- register int low, high, j, flg;
+ int low, high, j, flg;
for (low = 0, high = ft->fzklength; low < high;)
{
@@ -729,8 +727,8 @@
flg = Strncmp(key_yomi, (ft->tablefuzokugo + j)->yomi, YOMI_L);
*/
{
- register int n;
- register w_char *s1, *s2;
+ int n;
+ w_char *s1, *s2;
s1 = key_yomi;
s2 = (ft->tablefuzokugo + j)->yomi;
for (n = YOMI_L; n > 0 && *s1++ == *s2++; n--);
@@ -748,24 +746,23 @@
#endif
static int
-error_fzk ()
+error_fzk (void)
{
wnn_errorno = WNN_NOT_FZK_FILE;
- error1 ("Bat format in fzk_file\n");
+ log_err ("Bad format in fzk_file.");
return (-1);
}
static int
-error_eof ()
+error_eof (void)
{
wnn_errorno = WNN_NOT_FZK_FILE;
- error1 ("Unecpected EOF in reading fzk_file\n");
+ log_err ("Unecpected EOF in reading fzk_file.");
return (-1);
}
static int
-get_decimal (fp)
- register FILE *fp;
+get_decimal (FILE *fp)
{
unsigned char buf[24];
int k;
@@ -781,8 +778,7 @@
}
static int
-get_hexsa (fp)
- register FILE *fp;
+get_hexsa (FILE *fp)
{
unsigned char buf[24];
int k;
@@ -798,12 +794,10 @@
}
static int
-get_string (fp, buf)
- register FILE *fp;
- register unsigned char *buf;
+get_string (FILE *fp, unsigned char *buf)
{
- register unsigned char *c = buf;
- register int k;
+ unsigned char *c = buf;
+ int k;
for (; (k = vgetc (fp)) == ';' || k == '\n' || k == '\t' || k == ' ';)
{
if (k == ';')
@@ -831,15 +825,15 @@
}
static int
-check_eof (fp)
- register FILE *fp;
+check_eof (FILE *fp)
{
unsigned char buf[24];
if (get_string (fp, buf) != EOF)
{
wnn_errorno = WNN_NOT_FZK_FILE;
- error1 ("Not at the end of fzk_file\n");
+ log_err ("Not at the end of fzk_file.");
return (-1);
}
return (0);
}
+