DEBUG_DEFINE_DEBUGF(ocr)
-#define dbassert(x) \
- ((x) ? (void)0 : \
- fatal("Error in character set database.\n" \
- " Requirement not met: %s:%d: %s", __FILE__,__LINE__, #x))
-
-static void fgetsline(FILE *f, char *lbuf, size_t lbufsz) {
- errno=0;
- char *s= fgets(lbuf,lbufsz,f);
- sysassert(!ferror(f));
- dbassert(!feof(f));
- assert(s);
- int l= strlen(lbuf);
- dbassert(l>0); dbassert(lbuf[--l]='\n');
- lbuf[l]= 0;
-}
-#define FGETSLINE(f,buf) (fgetsline(f,buf,sizeof(buf)))
+#define FGETSLINE (dbfile_getsline(lbuf,sizeof(lbuf),__FILE__,__LINE__))
static void cleardb_node(DatabaseNode *n) {
int i;
DatabaseNode *current, *additional;
char chrs[MAXGLYPHCHRS+1];
Pixcol cv;
- int r,j,ctxi;
+ int j,ctxi;
int h, endsword;
char lbuf[100];
- FILE *db;
for (ctxi=0; ctxi<NCONTEXTS; ctxi++)
cleardb_node(&rd->contexts[ctxi]);
asprintf(&dbfname,"%s/charset-%d.txt",get_vardir(),rd->h);
sysassert(dbfname);
- db= fopen(dbfname,"r");
- free(dbfname);
- if (!db) {
- sysassert(errno==ENOENT);
- return;
- }
+ if (!dbfile_open(dbfname))
+ goto x;
- FGETSLINE(db,lbuf);
+ FGETSLINE;
dbassert(!strcmp(lbuf,"# ypp-sc-tools pctb font v1"));
- r= fscanf(db, "%d", &h);
- dbassert(r==1);
+ dbassert( dbfile_scanf("%d", &h) == 1);
dbassert(h==rd->h);
for (;;) {
- FGETSLINE(db,lbuf);
- if (!lbuf || lbuf[0]=='#') continue;
+ FGETSLINE;
+ if (!lbuf[0] || lbuf[0]=='#') continue;
if (!strcmp(lbuf,".")) break;
for (ctxi=0; ctxi<NCONTEXTS; ctxi++)
if (!strcmp(lbuf,context_names[ctxi]))
goto found_ctx;
/* not found, just skip */
- for (;;) { FGETSLINE(db,lbuf); if (!lbuf[0]) break; }
+ for (;;) { FGETSLINE; if (!lbuf[0]) break; }
continue;
found_ctx:
for (nchrs=0;;) {
- int c= fgetc(db); sysassert(!ferror(db)); dbassert(c!=EOF);
+ int c= fgetc(dbfile); sysassert(!ferror(dbfile)); dbassert(c!=EOF);
if (c=='\n') { dbassert(nchrs); break; }
dbassert(nchrs<MAXGLYPHCHRS);
if (c=='\\') {
unsigned cr;
- c= fgetc(db); sysassert(!ferror(db)); dbassert(c=='x');
- r= fscanf(db, "%2x", &cr); sysassert(!ferror(db)); dbassert(r==1);
+ c= fgetc(dbfile); sysassert(!ferror(dbfile)); dbassert(c=='x');
+ dbassert( dbfile_scanf("%2x", &cr) == 1);
assert(cr>0 && cr<=255);
c= cr;
}
current= &rd->contexts[ctxi];
for (;;) {
- FGETSLINE(db,lbuf);
+ FGETSLINE;
if (!lbuf[0]) { dbassert(current != &rd->contexts[ctxi]); break; }
char *ep;
cv= strtoul(lbuf,&ep,16); dbassert(!*ep);
strcpy(current->s, chrs);
current->endsword= endsword;
}
- sysassert(!ferror(db));
- sysassert(!fclose(db));
+ x:
+ dbfile_close();
+ free(dbfname);
}
static void cu_pr_ctxmap(unsigned ctxmap) {