summaryrefslogtreecommitdiff
path: root/inputmethod/skkserv/patches/patch-ag
diff options
context:
space:
mode:
Diffstat (limited to 'inputmethod/skkserv/patches/patch-ag')
-rw-r--r--inputmethod/skkserv/patches/patch-ag142
1 files changed, 142 insertions, 0 deletions
diff --git a/inputmethod/skkserv/patches/patch-ag b/inputmethod/skkserv/patches/patch-ag
new file mode 100644
index 00000000000..f31b2ab24bb
--- /dev/null
+++ b/inputmethod/skkserv/patches/patch-ag
@@ -0,0 +1,142 @@
+$NetBSD: patch-ag,v 1.1.1.1 2002/05/31 12:59:58 seb Exp $
+
+--- jisyo-tools/skkdic-expr.c.orig Tue Dec 17 14:51:28 1996
++++ jisyo-tools/skkdic-expr.c Mon Nov 6 01:34:22 2000
+@@ -78,59 +78,86 @@
+ }
+ }
+
++#if !defined(dbm_pagfno) || defined(DBM_SUFFIX)
++#define NEW_DB
++#endif
++
+ /* 作業用データベースファイルを削除
+ file_name には content が格納される */
+ static void db_remove_files()
+ {
+- char pag_name[256];
+- char dir_name[256];
++ char db_name[256];
+
+ db_remove_file(file_name);
+- sprintf(pag_name, "%s.pag", file_name);
+- db_remove_file(pag_name);
+- sprintf(dir_name, "%s.dir", file_name);
+- db_remove_file(dir_name);
++#ifdef NEW_DB
++ sprintf(db_name, "%s.db", file_name);
++ db_remove_file(db_name);
++#else
++ sprintf(db_name, "%s.pag", file_name);
++ db_remove_file(db_name);
++ sprintf(db_name, "%s.dir", file_name);
++ db_remove_file(db_name);
++#endif
+
+ if (okurigana_flag) {
+ db_remove_file(okuri_head_name);
+- sprintf(pag_name, "%s.pag", okuri_head_name);
+- db_remove_file(pag_name);
+- sprintf(dir_name, "%s.dir", okuri_head_name);
+- db_remove_file(dir_name);
++#ifdef NEW_DB
++ sprintf(db_name, "%s.db", okuri_head_name);
++ db_remove_file(db_name);
++#else
++ sprintf(db_name, "%s.pag", okuri_head_name);
++ db_remove_file(db_name);
++ sprintf(db_name, "%s.dir", okuri_head_name);
++ db_remove_file(db_name);
++#endif
+
+ db_remove_file(okuri_tail_name);
+- sprintf(pag_name, "%s.pag", okuri_tail_name);
+- db_remove_file(pag_name);
+- sprintf(dir_name, "%s.dir", okuri_tail_name);
+- db_remove_file(dir_name);
++#ifdef NEW_DB
++ sprintf(db_name, "%s.db", okuri_tail_name);
++ db_remove_file(db_name);
++#else
++ sprintf(db_name, "%s.pag", okuri_tail_name);
++ db_remove_file(db_name);
++ sprintf(db_name, "%s.dir", okuri_tail_name);
++ db_remove_file(db_name);
++#endif
+ }
+ }
+
++#ifndef O_EXCL
++#define O_EXCL 0
++#endif
++
+ /* データベースファイルを作成 */
+-static void db_make_files()
++static void db_make_files(tmpdir)
++ char *tmpdir;
+ {
+- sprintf(file_name, "/tmp/skkjisyo.%d", getpid());
++ int pid = getpid();
++ int fd;
++
++ sprintf(file_name, "%s/skkjisyo.%d", tmpdir, pid);
+ if (okurigana_flag) {
+- sprintf(okuri_head_name, "/tmp/skkhead.%d", getpid());
+- sprintf(okuri_tail_name, "/tmp/skktail.%d", getpid());
++ sprintf(okuri_head_name, "%s/skkhead.%d", tmpdir, pid);
++ sprintf(okuri_tail_name, "%s/skktail.%d", tmpdir, pid);
+ }
+
+ db_remove_files();
+- if ((db = dbm_open(file_name, O_RDWR|O_CREAT, 0600)) == NULL){
++ if ((db = dbm_open(file_name, O_RDWR|O_CREAT|O_EXCL, 0600)) == NULL){
+ perror(file_name);
+ exit(1);
+ }
+- if ((dbcontent = fopen(file_name, "w+")) == NULL){
++ if ((fd = open(file_name, O_RDWR|O_CREAT|O_EXCL, 0600)) < 0 ||
++ (dbcontent = fdopen(fd, "w+")) == NULL){
+ perror(file_name);
+ exit(1);
+ }
+ if (okurigana_flag) {
+- if ((okuriheaddb = dbm_open(okuri_head_name, O_RDWR|O_CREAT, 0600))
++ if ((okuriheaddb = dbm_open(okuri_head_name, O_RDWR|O_CREAT|O_EXCL, 0600))
+ == NULL){
+ perror(okuri_head_name);
+ exit(1);
+ }
+- if ((okuritaildb = dbm_open(okuri_tail_name, O_RDWR|O_CREAT, 0600))
++ if ((okuritaildb = dbm_open(okuri_tail_name, O_RDWR|O_CREAT|O_EXCL, 0600))
+ == NULL){
+ perror(okuri_tail_name);
+ exit(1);
+@@ -698,7 +725,7 @@
+ for (key = dbm_firstkey(db); key.dptr != NULL; key = dbm_nextkey(db)) {
+ content = dbm_fetch(db, key);
+ for(i = 0; i < key.dsize; ++ i)
+- putc((key.dptr)[i], output);
++ putc(((char *) key.dptr)[i], output);
+ putc(' ', output);
+ fseek(dbcontent, getpos(content.dptr), 0);
+ db_gets(kanji, BLEN, dbcontent);
+@@ -716,7 +743,7 @@
+ if (entry.dptr != NULL) continue;
+
+ for(i = 0; i < key.dsize; ++ i)
+- putc((key.dptr)[i], output);
++ putc(((char *) key.dptr)[i], output);
+ putc(' ', output);
+ putc('/', output);
+ okuri_type_out(&key, output);
+@@ -775,9 +802,8 @@
+ exit(1);
+ }
+
+- sprintf(file_name, "%s/skkjisyo.%d", tmpdir, getpid());
+ set_signal_handler();
+- db_make_files();
++ db_make_files(tmpdir);
+
+ negate = 0;
+ for (; i < argc; ++ i) {