[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 メーリングリストの案内