[Mew-dist 10169] Re: fsync()

SAKAI Kiyotaka ksakai at example.com
1999年 8月 17日 (火) 22:01:07 JST


>> In article <19990730124507D.kazu at example.com>, Kazu Yamamoto (山本和彦) <kazu at example.com> writes:

>> なんとなく、perlを updateしてみて、imgetが fsyncについて文句を
>> 言ったのをみて [Mew-dist 07880]で松田さんが指摘してる fsync()
>> の system call番号のことを思いだしました。
>> 
>> 要約すると、「system callの番号は動的には変らないので
>> configure するときに設定してしまってはどうか?」と言うものです。

> これを実装し検証して下さる人はいませんか?

多分、こんな感じのコードになるのではないかと思いますが、どなたか検証し
てもらえないでしょうか?

なお、patch を当てた後に configure を実行する必要があります。
-- 
酒井 清隆 (E-mail: ksakai at example.com)
-------------- next part --------------
Index: configure.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-121/configure.in,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 configure.in
--- configure.in	1999/08/17 02:35:43	1.1.1.1
+++ configure.in	1999/08/17 12:47:51
@@ -11,6 +11,7 @@
 dnl Checks for programs.
 AC_PROG_INSTALL()
 AC_CANONICAL_HOST
+AC_PROG_CC
 AC_PROG_CPP
 
 im_file_attr="Fcntl::O_RDWR()|Fcntl::O_CREAT()|Fcntl::O_EXCL()"
@@ -23,6 +24,7 @@
 AC_SUBST(im_my_siteperl)
 AC_SUBST(im_usecl)
 AC_SUBST(im_nosync)
+AC_SUBST(im_fsync_no)
 AC_SUBST(im_hostname)
 IM_PATH_PERLV_PROGS(im_path_perl, perl perl5, PERL5_NOT_FOUND)
 case "$im_path_perl" in
@@ -51,19 +53,25 @@
 [im_rpop="-o root -m 4555"],
 [im_rpop="-m 555"],)
 
-dnl check fsync() is in syscall.h or sys/syscall.h
+dnl check fsync() is in sys/syscall.h
 im_nosync="undefined"
-for im_check_headers in sys/syscall.h syscall.h
-do
-	AC_CHECK_HEADER($im_check_headers,
-			AC_EGREP_CPP(sys_fsync_is_found,
-			[#include <$im_check_headers>
-			 #ifdef SYS_fsync
-			 sys_fsync_is_found
-			 #endif],
-			im_nosync="no",
-			im_nosync="yes"),)
-done
+AC_CHECK_HEADER(sys/syscall.h,
+cat > conftest.c << EOF
+#include <sys/syscall.h>
+#ifdef SYS_fsync
+echo SYS_fsync;
+#else
+echo undef;
+#endif
+EOF
+
+im_fsync_no=`eval $ac_cpp conftest.c | egrep "^echo" | sh`
+if test "x$im_fsync_no" = "xundef"; then
+  im_nosync="yes"
+else
+  im_nosync="no"
+fi
+)
 
 im_src_siteperl="use lib '`pwd`';	###DELETE-ON-INSTALL###"
 AC_ARG_WITH(perldir,
Index: IM/Config.pm.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-121/IM/Config.pm.in,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 Config.pm.in
--- Config.pm.in	1999/08/17 02:35:43	1.1.1.1
+++ Config.pm.in	1999/08/17 12:54:57
@@ -32,7 +32,7 @@
     mail_dir mail_path news_dir news_path queue_dir queue_path
     inbox_folder draft_folder trash_folder config_cases config_case_inbox
     preserve_dot
-    folder_mode msg_mode allowcrlf no_sync
+    folder_mode msg_mode allowcrlf no_sync fsync_no
     addrbook_file aliases_file petname_file
     context_file getchksbr_file getsbr_file scansbr_file scan_header_pick
     address addresses_regex
@@ -56,7 +56,7 @@
 	    $O_FOPT %C_DESC %C_VNAM
 	    %WHO_SET
 	    @SELECTORS
-	    $IM_LIBDIR $IM_DB_TYPE
+	    $IM_LIBDIR $IM_DB_TYPE $FSYNC_NO
 	    $prefix $exec_prefix);
 
 ##
@@ -67,6 +67,7 @@
 $exec_prefix= "@exec_prefix@";
 $IM_LIBDIR  = "@libdir@/im";
 $IM_DB_TYPE = '@im_db_type@';
+$FSYNC_NO = @im_fsync_no@;
 
 sub file_attr () {
     return @im_file_attr@;
@@ -785,6 +786,10 @@
 
 sub no_sync () {
     return $NoSync;
+}
+
+sub fsync_no () {
+    return $FSYNC_NO;
 }
 
 sub addrbook_file () {
Index: IM/MsgStore.pm
===================================================================
RCS file: /home/ksakai/cvsroot/im-121/IM/MsgStore.pm,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 MsgStore.pm
--- MsgStore.pm	1999/08/17 02:35:44	1.1.1.1
+++ MsgStore.pm	1999/08/17 12:52:50
@@ -16,7 +16,7 @@
 
 use Fcntl;
 use IM::Config qw(getsbr_file msg_mode msgdbfile expand_path
-		  inbox_folder no_sync file_attr);
+		  inbox_folder no_sync fsync_no file_attr);
 use IM::Util;
 use IM::Folder qw(message_number message_name create_folder touch_folder);
 use IM::Message qw(gen_date);
@@ -296,6 +296,8 @@
 sub fsync ($) {
     my $fno = shift;
 
+    return syscall(fsync_no(), $fno);
+    
     unless (defined($sys_fsync)) {
 	my $inc = 'syscall.ph';		# only for BSDs?
 	my $prefix;


Mew-dist メーリングリストの案内