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