SDBM_File

このページはActivePerl build 6xxシリーズのSDBM_Fileの修正版を提供するページです。


ActivePerl build 6xxシリーズに付属のSDBM_FileはそのDBファイルにゴミ(HDに残った他のファイルの残骸)が 書き込まれるという嬉しくない仕様(?)を持っています。 これはUNIX系のファイルシステムと MS-Windowsのそれとの差によるもので致し方のないものですが、渡辺博文氏の提供された次のパッチをあてることにより この悪しき仕様を解消できます。
このバグとパッチは渡辺さんに教えていただいたものとして bugs.activestate.com に報告してあります。 現在のperlのSDBM_Fileにはこのパッチがあたっています。
--- sdbm.c.orig	Fri Jan 22 09:40:54 1999
+++ sdbm.c	Fri Jan 22 10:08:49 1999
@@ -270,2 +270,6 @@
 	char twin[PBLKSIZ];
+#if defined(DOSISH) || defined(WIN32)
+	char zer[PBLKSIZ];
+	long oldtail;
+#endif
 	char *pag = db->pagbuf;
@@ -292,2 +296,19 @@
  */
+
+#if defined(DOSISH) || defined(WIN32)
+		/*
+		 * Fill hole with 0 if made it.
+		 * (hole is NOT read as 0)
+		 */
+		oldtail = lseek(db->pagf, 0L, SEEK_END);
+		memset(zer, 0, PBLKSIZ);
+		while (OFF_PAG(newp) > oldtail) {
+			if (lseek(db->pagf, 0L, SEEK_END) < 0 ||
+			    write(db->pagf, zer, PBLKSIZ) < 0) {
+
+				return 0;
+			}
+			oldtail += PBLKSIZ;
+		}
+#endif
 		if (hash & (db->hmask + 1)) {


Perl
ホームページ

リンクはご自由にどうぞ。問合わせ等の必要はありません。

Last modified: Sun Nov 11 2001
Copyright (C) 2001 SUZUKI Norio, 鈴木紀夫