diff options
Diffstat (limited to 'inputmethod/skkserv/patches/patch-ag')
-rw-r--r-- | inputmethod/skkserv/patches/patch-ag | 142 |
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) { |