chiark / gitweb /
WIP test decode-marketdata with example2
[ypp-sc-tools.db-test.git] / pctb / ocr.c
index d12218f39fd2953eef1f892c9bb7fbd360e3b64c..78542398abe3edcfdbc2078db667a1d135d01d01 100644 (file)
@@ -228,6 +228,11 @@ static void callout_unknown(OcrReader *rd, int w, Pixcol cols[],
   const char *p;
   char cb;
   Pixcol pv;
+
+  if (!o_resolver)
+    fatal("OCR failed - unrecognised characters or ligatures.\n"
+         "Character set database needs to be updated or augmented.\n"
+         "See README.charset.\n");
   
   if (!resolver) {
     sysassert(! pipe(jobpipe) );
@@ -241,11 +246,11 @@ static void callout_unknown(OcrReader *rd, int w, Pixcol cols[],
       /* we know donepipe[1] is >= 4 and we have dealt with all the others
        * so we aren't in any danger of overwriting some other fd 4: */
       sysassert( dup2(donepipe[1],4) ==4 );
-      execlp("./yppsc-ocr-resolver", "yppsc-ocr-resolver",
+      execlp(o_resolver, o_resolver,
             DEBUGP(callout) ? "--debug" : "--noop-arg",
             "--automatic-1",
             (char*)0);
-      sysassert(!"execlp failed");
+      sysassert(!"execlp ocr-resolver failed");
     }
     sysassert(! close(jobpipe[0]) );
     sysassert(! close(donepipe[1]) );
@@ -295,27 +300,10 @@ static void callout_unknown(OcrReader *rd, int w, Pixcol cols[],
   }
 
   if (r==0) {
-    pid_t pid;
-    int st;
-    for (;;) {
-      pid= waitpid(resolver_pid, &st, 0);
-      if (pid==-1) { sysassert(errno==EINTR); continue; }
-      break;
-    }
-    sysassert(pid==resolver_pid);
-    if (WIFEXITED(st)) {
-      if (WEXITSTATUS(st))
-       fatal("character resolver failed with nonzero exit status %d",
-             WEXITSTATUS(st));
-      fclose(resolver);
-      close(resolver_done);
-      resolver= 0;
-    } else if (WIFSIGNALED(st)) {
-      fatal("character resolver died due to signal %s%s",
-           strsignal(WTERMSIG(st)), WCOREDUMP(st)?" (core dumped)":"");
-    } else {
-      fatal("character resolver gave strange wait status %d",st);
-    }
+    waitpid_check_exitstatus(resolver_pid, "character resolver");
+    fclose(resolver);
+    close(resolver_done);
+    resolver= 0;
   } else {
     assert(r==1);
     sysassert(cb==0);