summaryrefslogtreecommitdiff
path: root/Build/source/texk/mendexk
diff options
context:
space:
mode:
authorHironobu Yamashita <h.y.acetaminophen@gmail.com>2022-03-07 12:36:44 +0000
committerHironobu Yamashita <h.y.acetaminophen@gmail.com>2022-03-07 12:36:44 +0000
commit998c88f0b33288c2d63fd311bc10dc7735cc963a (patch)
treef3c1854a8dd5c2ffe4cf642ec1d0cf65e9fa9261 /Build/source/texk/mendexk
parentb1ebb1b09f7e1347556f99f78fe54a1ae835a2b7 (diff)
[up]mendex: output to file instead of accumulating into buffer too much
git-svn-id: svn://tug.org/texlive/trunk@62492 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/mendexk')
-rw-r--r--Build/source/texk/mendexk/ChangeLog5
-rw-r--r--Build/source/texk/mendexk/fwrite.c26
2 files changed, 19 insertions, 12 deletions
diff --git a/Build/source/texk/mendexk/ChangeLog b/Build/source/texk/mendexk/ChangeLog
index da3b5bf7624..4d2f0216383 100644
--- a/Build/source/texk/mendexk/ChangeLog
+++ b/Build/source/texk/mendexk/ChangeLog
@@ -1,3 +1,8 @@
+2022-03-07 Hironobu Yamashita <h.y.acetaminophen@gmail.com>
+
+ * fwrite.c: output to file instead of accumulating too much.
+ https://github.com/texjporg/tex-jp-build/issues/137
+
2022-01-22 Hironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
* fread.c: Adapt to arguments of input_line2() in ptexenc-1.4.0.
diff --git a/Build/source/texk/mendexk/fwrite.c b/Build/source/texk/mendexk/fwrite.c
index ef97d0c87a3..883dffd6e01 100644
--- a/Build/source/texk/mendexk/fwrite.c
+++ b/Build/source/texk/mendexk/fwrite.c
@@ -13,8 +13,8 @@
int line_length=0;
static void printpage(struct index *ind, FILE *fp, int num, char *lbuff);
-static int range_check(struct index ind, int count, char *lbuff);
-static void linecheck(char *lbuff, char *tmpbuff, int force);
+static int range_check(struct index ind, int count, char *lbuff, FILE *fp);
+static void linecheck(char *lbuff, char *tmpbuff, FILE *fp, int force);
static void crcheck(char *lbuff, FILE *fp);
/* All buffers have size BUFFERLEN. */
@@ -362,7 +362,7 @@ static void printpage(struct index *ind, FILE *fp, int num, char *lbuff)
line_length=strlen(lbuff);
for(j=0;j<ind[num].num;j++) {
- cc=range_check(ind[num],j,lbuff);
+ cc=range_check(ind[num],j,lbuff,fp);
if (cc>j) {
int epage = pnumconv2(&ind[num].p[cc]);
int bpage = pnumconv2(&ind[num].p[j]);
@@ -397,14 +397,14 @@ static void printpage(struct index *ind, FILE *fp, int num, char *lbuff)
if (strlen(ind[num].p[j].enc)>0) {
SAPPENDF(tmpbuff,"%s",encap_suffix);
}
- linecheck(lbuff,tmpbuff, FALSE);
+ linecheck(lbuff,tmpbuff,fp, FALSE);
j=cc;
if (j==ind[num].num) {
goto PRINT;
}
else {
SAPPENDF(tmpbuff,"%s",delim_n);
- linecheck(lbuff,tmpbuff, TRUE);
+ linecheck(lbuff,tmpbuff,fp, TRUE);
}
}
else if (strlen(ind[num].p[j].enc)>0) {
@@ -425,19 +425,19 @@ static void printpage(struct index *ind, FILE *fp, int num, char *lbuff)
SAPPENDF(tmpbuff,"%s",ind[num].p[j].page);
SAPPENDF(tmpbuff,"%s",encap_suffix);
SAPPENDF(tmpbuff,"%s",delim_n);
- linecheck(lbuff,tmpbuff, FALSE);
+ linecheck(lbuff,tmpbuff,fp, FALSE);
}
else {
SAPPENDF(tmpbuff,"%s",ind[num].p[j].page);
SAPPENDF(tmpbuff,"%s",delim_n);
- linecheck(lbuff,tmpbuff, FALSE);
+ linecheck(lbuff,tmpbuff,fp, FALSE);
}
}
else {
/* no encap */
SAPPENDF(tmpbuff,"%s",ind[num].p[j].page);
SAPPENDF(tmpbuff,"%s",delim_n);
- linecheck(lbuff,tmpbuff, FALSE);
+ linecheck(lbuff,tmpbuff,fp, FALSE);
}
}
@@ -469,7 +469,7 @@ static void printpage(struct index *ind, FILE *fp, int num, char *lbuff)
else {
SAPPENDF(tmpbuff,"%s",ind[num].p[j].page);
}
- linecheck(lbuff,tmpbuff, FALSE);
+ linecheck(lbuff,tmpbuff,fp, FALSE);
PRINT:
fputs(lbuff,fp);
@@ -477,7 +477,7 @@ PRINT:
lbuff[0]='\0';
}
-static int range_check(struct index ind, int count, char *lbuff)
+static int range_check(struct index ind, int count, char *lbuff, FILE *fp)
{
int i,j,k,cc1,cc2,start,force=0;
char tmpbuff[BUFFERLEN],errbuff[BUFFERLEN];
@@ -513,7 +513,7 @@ static int range_check(struct index ind, int count, char *lbuff)
if (strlen(ind.p[j].enc)>0) {
SPRINTF(tmpbuff,"%s%s%s%s%s%s",encap_prefix,ind.p[j].enc,encap_infix
,ind.p[j].page,encap_suffix,delim_n);
- linecheck(lbuff,tmpbuff, FALSE);
+ linecheck(lbuff,tmpbuff,fp, FALSE);
}
}
}
@@ -551,10 +551,12 @@ static int range_check(struct index ind, int count, char *lbuff)
}
/* check line length */
-static void linecheck(char *lbuff, char *tmpbuff, int force)
+static void linecheck(char *lbuff, char *tmpbuff, FILE *fp, int force)
{
if (line_length+strlen(tmpbuff)>line_max && !force) {
SAPPENDF(lbuff,"\n");
+ fputs(lbuff,fp);
+ lbuff[0]='\0';
SAPPENDF(lbuff,"%s",indent_space);
SAPPENDF(lbuff,"%s",tmpbuff);
line_length=indent_length+strlen(tmpbuff);