Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: util::fclose(), util::writefile()
寺西です。
Tadamasa Teranishi wrote:
>
> Namazu ではエラーメッセージを返すサブルーチンが多数ありまして、
> そのスタイルに合わせたものになっています。
とは言え、Perl 的にはあまり美しくないのも事実なので以下に変更します。
> 別に反対にしても良いのですが、その場合、エラーメッセージを
> 呼び出し側に返したいなら、その仕組みを別に用意してやる必要があります。
ということまで、とてもやってられないので、呼び出し側のエラー処理は
行わず、void 扱いのサブルーチンということにしてしまいます。
(常に undef を返す。)
# サブルーチン内のエラーチェックも不十分だし、fopen, readfile も
# していないし。
> もっともエラー処理に関しては Namazu はかなりあいまいなので、その辺り
> 全般を見直すべきなのかもしれませんが。
どなたかが抜本的にエラー処理の見直しをやっていただく時にでも、
今回追加した関数のエラー処理をお願いします。
ちなみに「呼び出し側のエラー処理は行わない」としても、基本的には
現状と何ら変わりませんので、事態が悪化することないでしょう。
# cvs diff util.pl
Index: util.pl
===================================================================
RCS file: /storage/cvsroot/namazu/pl/util.pl,v
retrieving revision 1.28
diff -u -p -r1.28 util.pl
--- util.pl 11 Jan 2004 08:57:58 -0000 1.28
+++ util.pl 14 Mar 2004 08:31:16 -0000
@@ -65,6 +65,21 @@ sub fopen ($) {
return $fh;
}
+sub fclose ($) {
+ my ($arg) = @_;
+ my $fh;
+ if (ref $arg) {
+ if ($arg =~ /^(IO::File|FileHandle)/) {
+ $fh = $arg;
+ $fh->close();
+ return undef;
+ }
+ }
+
+ warn "$arg: " . _("not an IO::File/FileHandle object!\n");
+ return undef;
+}
+
sub dprint (@) {
if ($var::Opt{'debug'}) {
for my $str (@_) {
@@ -132,9 +147,35 @@ sub readfile ($) {
# }
read $fh, $cont, $size;
+ unless (ref $arg) {
+ fclose($fh);
+ }
return $cont;
}
+sub writefile ($$) {
+ my ($arg, $cont) = @_;
+
+ my $fh;
+ if (ref $arg) {
+ if ($arg =~ /^(IO::File|FileHandle)/) {
+ $fh = $arg;
+ } else {
+ warn "$arg: " . _("not an IO::File/FileHandle object!\n");
+ return undef;
+ }
+ } else {
+ $fh = efopen("> $arg");
+ }
+
+ print $fh $$cont;
+
+ unless (ref $arg) {
+ fclose($fh);
+ }
+ return undef;
+}
+
sub filesize($) {
my ($arg) = @_;
my $fh;
@@ -150,6 +191,9 @@ sub filesize($) {
# 2.0.7 had problem
}
my $size = -s $fh;
+ unless (ref $arg) {
+ fclose($fh);
+ }
return $size;
}
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E