ruby-changes:21603
From: akr <ko1@a...>
Date: Mon, 7 Nov 2011 20:17:27 +0900 (JST)
Subject: [ruby-changes:21603] akr:r33652 (trunk): * ext/dbm/extconf.rb: check dbm_pagfno() and dbm_dirfno().
akr 2011-11-07 20:17:17 +0900 (Mon, 07 Nov 2011) New Revision: 33652 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=33652 Log: * ext/dbm/extconf.rb: check dbm_pagfno() and dbm_dirfno(). * ext/dbm/dbm.c: use above to set close-on-exec flag. Modified files: trunk/ChangeLog trunk/ext/dbm/dbm.c trunk/ext/dbm/extconf.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 33651) +++ ChangeLog (revision 33652) @@ -1,3 +1,9 @@ +Mon Nov 7 20:15:44 2011 Tanaka Akira <akr@f...> + + * ext/dbm/extconf.rb: check dbm_pagfno() and dbm_dirfno(). + + * ext/dbm/dbm.c: use above to set close-on-exec flag. + Mon Nov 7 20:05:16 2011 NAKAMURA Usaku <usa@r...> * io.c (io_fflush): remove fsync(). Index: ext/dbm/dbm.c =================================================================== --- ext/dbm/dbm.c (revision 33651) +++ ext/dbm/dbm.c (revision 33652) @@ -162,6 +162,30 @@ } } + if (dbm) { + /* + * History of dbm_pagfno() and dbm_dirfno() in ndbm and its compatibles. + * + * 1986: 4.3BSD provides ndbm. + * It provides dbm_pagfno() and dbm_dirfno() as macros. + * 1991: gdbm-1.5 provides them as functions. + * They returns a same descriptor. + * (Earlier releases may have the functions too.) + * 1991: Net/2 provides Berkeley DB. + * It doesn't provide dbm_pagfno() and dbm_dirfno(). + * 1992: 4.4BSD Alpha provides Berkeley DB with dbm_dirfno() as a function. + * dbm_pagfno() is a macro as DBM_PAGFNO_NOT_AVAILABLE. + * 2011: gdbm-1.9 creates a separate dir file. + * dbm_pagfno() and dbm_dirfno() returns different descriptors. + */ +#if defined(HAVE_DBM_PAGFNO) + rb_fd_fix_cloexec(dbm_pagfno(dbm)); +#endif +#if defined(HAVE_DBM_DIRFNO) + rb_fd_fix_cloexec(dbm_dirfno(dbm)); +#endif + } + if (!dbm) { if (mode == -1) return Qnil; rb_sys_fail(RSTRING_PTR(file)); Index: ext/dbm/extconf.rb =================================================================== --- ext/dbm/extconf.rb (revision 33651) +++ ext/dbm/extconf.rb (revision 33652) @@ -21,6 +21,8 @@ "qdbm" => ["relic.h", "qdbm/relic.h"], } +$dbm_headers = [] + def headers.db_check(db) db_prefix = nil have_gdbm = false @@ -44,6 +46,7 @@ have_func(db_prefix+"dbm_clearerr") unless have_gdbm $defs << hsearch if hsearch $defs << '-DDBM_HDR="<'+hdr+'>"' + $dbm_headers << hdr true else false @@ -53,5 +56,7 @@ if dblib.any? {|db| headers.db_check(db)} have_header("cdefs.h") have_header("sys/cdefs.h") + have_func("dbm_pagfno", $dbm_headers) + have_func("dbm_dirfno", $dbm_headers) create_makefile("dbm") end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/