〜2001年3月中旬〜
--- lib/net/sslhttp.rb.orig	Wed Feb  7 08:25:05 2001
+++ lib/net/sslhttp.rb	Sun Mar 11 01:01:42 2001
@@ -46,3 +46,3 @@
       resp = ::Net::NetPrivate::HTTPResponse.new( 
-                     status, discrip, @socket, false)
+                     status, discrip, @socket, false, @http_version)
 
POST https://iw.nifty.com:443/iw/nifty/mylist/nifty.log HTTP/1.1ではURLエラーになってしまい
POST /iw/nifty/mylist/nifty.log HTTP/1.1としないといけない。 これに対応するにはnet/httpにはちゃんとmethodが用意されていて、 POSTに渡すpathは
module Net
  class HTTP
    module ProxyMod
      alias orig_edit_path edit_path
      def edit_path( path )
        if use_ssl
          if /^iw\.nifty\.com/ =~ addr_port
            path
          else
            'https://' + addr_port + path
          end
        else
          'http://' + addr_port + path
        end
      end
    end
  end
end
のようにedit_pathで決まる。
あとgetservbynameを使わない、~/.netrcを見るとか
*2、いろいろ改造してできあがったのが
httpsget.rbだ。
% ruby httpsget.rb -v -a -o 'nif%Y%m%d'.log \ https://iw.nifty.com/iw/nifty/mylist/nifty.log \ save=on \ logout=on \ /iw/nifty/fgalts/mes/all/index.html=checked \ /iw/nifty/fext/mes/all/index.html=checked \ /iw/nifty/funix/mes/all/index.html=checked \ /iw/nifty/flinux/mes/all/index.html=checked \ /iw/nifty/fpl/mes/5/index.html=checkedという感じで使う。urlだけだとGET methodになる。-vはverbose。 -oで出力ファイル名の指定(Time.now.strftimeしてるので%Yとかが使える)、 さらに-aをつければアペンドモードになる。デフォルトはpathのbasename。
% ruby httpsget.rb http://www.ruby-lang.org/~rubikitch/refm/ruby162-refm.rd.gzで今話題のリファレンスマニュアルのRD版が取ってこれる。
%{shared|mdll: %{mno-cygwin:dllcrt2%O%s}}
となってるけどcrt2.oと同じように
%{shared|mdll: %{mno-cygwin:mingw/dllcrt2%O%s}}
じゃないとgcc -sharedでdllcrt2.oが見つからないというエラーになる。
strrchr (src, '\\'))のように'\\'があちこちにちりばめられてるので、どうにもならないと思います。 statを自前で持つのも現実的じゃないし。
write "CONNECT iw.nifty.com:443 HTTP/\r\n" write "\r\n"という感じでバージョンが入らない。ひょっとしてこれが正解?
--- lib/net/https.rb.orig	Mon Mar 12 04:16:05 2001
+++ lib/net/https.rb	Fri Mar 16 00:57:55 2001
@@ -113,3 +113,3 @@
         if proxy?
-          resp = Conn.new.exec(@socket, @address, @port, @http_version)
+          resp = Conn.new.exec(@socket, @address, @port, @curr_http_version)
           if resp.code != '200'
httpsget.rbはNet::HTTP::Get, Net::HTTP::Postを使ってみた。
CVS(ruby_1_6)最新じゃないとだめかも。
% cat stat.c
#include <stdio.h>
#include <sys/stat.h>
main()
{
    struct stat buf;
    printf("%s: %d\n", "\x95\x5c", stat("\x95\x5c", &buf));
}
% gcc stat.c -o stat
% touch `printf "\x95\x5c"`
% ./stat
表: -1
% gcc -bmingw stat.c -o mstat
% ./mstat
表: 0
つまりCygwin版rubyも対処しようがないわけで、
ことある毎にCygwin自体が対応してないから日本語のファイル名は使えません、
といいわけしているのはこれが理由です。
水野真紀と水野美紀 坂井真紀と酒井美紀 酒井若菜と酒井彩名 後藤理沙と須藤理彩 椎名桔平と椎名純平 西村雅彦と西村和彦がいる。字は間違っているかも。
:checkw32api :checkw32api1 :checkw32api2と3つラベルがあってもgoto checkw32api1は、 一番最初に現われるcheckw32apiへ飛ぶ。 cmd.exeだとちゃんとcheckw32api1へ飛ぶ。 Win9x/MEとWinNT/2kとの違いだから注意しよう。 プラットフォームSDKのwin95cmd.exeだとcmd.exeという名前を含んでいるだけあって問題ない。 Win98上でもふだんはCygwin版のzshを使っているので、 configure.batは
% win95cmd /c configure.bat --no-debugという感じで実行している。 だから無限ループに関してはしばらく気づかなかった。
$(subst \,/,$(shell cygpath -w $(CURDIR)))にした。
make NOCYGWIN=-bmingwとする。があまり意味はない。
% tar xfvz racc-1.3.8.tar.gz % mkdir linux cygwin mingw % cd linux % ruby ../racc-1.3.8/setup.rb config % ruby ../racc-1.3.8/setup.rb setup % sudo ruby ../racc-1.3.8/setup.rb install % cd ../cygwin % i386-cygwin-ruby ../racc-1.3.8/setup.rb config % i386-cygwin-ruby ../racc-1.3.8/setup.rb setup % i386-cygwin-ruby ../racc-1.3.8/setup.rb install % cd ../mingw % i386-mingw32-ruby ../racc-1.3.8/setup.rb config % i386-mingw32-ruby ../racc-1.3.8/setup.rb setup % i386-mingw32-ruby ../racc-1.3.8/setup.rb installてな具合にできるとありがたい。
でどう?
\\host\shareは
\\host\share\.のように足してからstatする。 なんでもかんでも'.'で終わるようにしてしまう。 commitしちゃったけど、WinNTではどうかなあ。明日試そう。