2008-04-01から1ヶ月間の記事一覧
http://zipruby.rubyforge.org/ https://rubyforge.org/projects/zipruby/ エントリ読み込みのときに、allocaでまとめてバッファを確保するのをやめて、固定長のバッファにちまちま読み込むようにした ちまちまエントリを読み込むAPIを追加 Zip::Archive.ope…
perlでやっている人がいたので真似てみた。 $stdout.sync = true while l = ARGF.gets puts Time.now.strftime('%F %R ') + l end ~/work$ vmstat 3 | ruby append_time.rb 2008-04-30 10:41 procs -----------memory---------- ---swap-- -----io---- --sys…
id:gioextさんから読めないファイルがあるとのことで、調べてみた。 Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0xb7d1eb60 (LWP 16748)] zipruby_file_read (self=3081164780) at zipruby_file.c:181 181 if (zip_fread(p…
ここから拝借。 これ仕様書に載ってんのかなぁ? $__crc32_table = [] # Lookup table array def __crc32_reflect(ref, ch) # Reflects CRC bits in the lookup table value = 0 # Swap bit 0 for bit 7, bit 1 for bit 6, etc. (1..ch).each do |i| if (ref…
さんざてこずって、なんとか暗号化Zipを復号できた。 とりあえず、Windowのバイナリも含めてリポジトリにコミット。 require 'zipruby' Zip::Archive.decrypt('test.zip', 'x') # ファイル, パスワード
Info-ZIPのCRC32とzlibのcrc32でなぜか戻り値が違う。 printf("%x", CRC32(305419896L, 'x')); //=> 123456 printf("%x", crc32(305419896L, "x", 1)); //=> d210dbdb で、zlibのcrc32のソースを読む。 /* ================================================…
仕様書とZipのバイナリとにらめっこしてわかったのは、とりあえず… 暗号化したZipファイルはgeneral purpose bit flagにフラグが立つ Data descriptorが付加される…みたいだけどよくわからん データの先頭12バイトが鍵(?)。その分、サイズが増える。
http://www.pkware.com/documents/casestudies/APPNOTE.TXT Overall .ZIP file format: [local file header 1] [file data 1] [data descriptor 1] . . . [local file header n] [file data n] [data descriptor n] [archive decryption header] [archive ex…
http://www.pkware.com/documents/casestudies/APPNOTE.TXT C. Data descriptor: crc-32 4 bytes compressed size 4 bytes uncompressed size 4 bytes This descriptor exists only if bit 3 of the general purpose bit flag is set (see below). It is byt…
http://www.pkware.com/documents/casestudies/APPNOTE.TXT D. Archive decryption header: The Archive Decryption Header is introduced in version 6.2 of the ZIP format specification. This record exists in support of the Central Directory Encryp…
Info-ZIPで暗号化するとData descriptorはつかないけど、Windowsで暗号化したらData descriptorがついてきた。 なーぜー。
データを処理してみないとなんとも。 #include <string.h> #include "zlib.h" void init_keys(uLong *keys) { keys[0] = 305419896L; keys[1] = 591751049L; keys[2] = 878082192L; } void update_keys(uLong *keys, char c) { keys[0] = crc32(keys[0], &c, 1); keys[</string.h>…
http://zipruby.rubyforge.org/ https://rubyforge.org/projects/zipruby/ これはなに? libzipのRubyバインディングです。 Zipファイルの作成・解凍ができます。 インストール/ビルド gem install zipruby UNIXでのビルドにはlibzipが必要です Windowsで使…
https://rubyforge.org/projects/zipruby/ eachメソッドの実装 []メソッドの実装 ←クローズが必要なので中括弧をfopenにしない Enumerableのインクルード add_functionのテスト ←関数をなくした マーク漏れ、メモリリークのチェック パスワード付きZipの操作…
off_tがらみのバグが。 ruby.hのインクルードを最後にしたら直った。どっかで2重に定義されてる?
http://www.ruby-doc.org/
http://practical-scheme.net/wiliki/wiliki.cgi?Gauche%3aWindows%2fVC%2b%2b%3alog%3adetail_2005_2#H-igextc 同じ名前のファイルがあっても上書きしてくれないらしい。しかたないのでzip_close.cのrenameを置き換え。 #ifdef _WIN32 #include <windows.h> #include <io.h> </io.h></windows.h>…
※リリースしました libzipのRubyバインディング。 とりあえず。 ソース http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/zipruby/ext/?root=svn ダウンロード http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/zipruby/ext.tar.gz?root=svn&view=tar ms…
アーカイブを作るとやたらとCRCエラーが出るので、なんで?なんで?と思ってたら、fwriteでバイナリデータの改行コードが書き換えられていたせいだった…orzfopenではバイナリモードで開いているので、openを修正。 #define open(p, f, m) _open((p), ((f) | …
http://www.pkware.com/documents/casestudies/APPNOTE.TXT アルゴリズムはともかくフォーマット自体はシンプルな気がする。
ICUを使ってみて自分の頭の悪さに絶望した! …C++勉強するかなー。
http://builder.japan.zdnet.com/sp/ruby-doukaku-panel/story/0,3800086254,20369264,00.htm引数のデフォルト値って、これいいのかなぁ? def asm(seq, head = seq.first, i = seq.first) if seq.first == i asm(seq.slice(1..-1), head, i + 1) else [[hea…
http://jadtfmt.rubyforge.org/smpdtfmt/ http://rubyforge.org/projects/jadtfmt/ これは何? ICUのSimpleDateFormatのラッパです。 実装はJapaneseDateFormatとほとんど同じです。 ダウンロード http://rubyforge.org/frs/?group_id=6074 ビルド/インスト…
http://ray.sakura.ne.jp/asm/index.html あとで読む。
http://jadtfmt.rubyforge.org/ http://rubyforge.org/projects/jadtfmt/ これは何? ICUを使ってTimeオブジェクトを和暦で出力します。昭和64年の判定とかがわりと正確です(たぶん)。OSによっては寛政とか寛永とか出力できるかもしれないです。 書式につ…
http://storehouse.sakura.ne.jp/resizable/resizable2.htm 以前作ったResizableで画像のサイズも変更できることに気がついた。 そのうち使うかな?
こちらのエントリからコードを拝借。コードページとか。 C++難しいなぁ…。ちゅーか元号変わったら、ICUバージョンアップするのかな? #include <string> #include <iostream> #include "unicode/calendar.h" #include "unicode/smpdtfmt.h" void format(char *dst, const char </iostream></string>…
※ちゃんとしたの作りました JaDatesの記事を呼んでICUで和暦の変換ができることを思い出して、昨日からちまちまと作成。http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/jacal/jacal/?root=svn require 'jacal' class Time def jafmt(fmt) JaCal.format(s…
拡張ファイルでの$KODEの判定はどうやるんだろうと思ってソースをあさったら、re.cにrb_get_kcode()があった。 const char* rb_get_kcode() { switch (reg_kcode) { case KCODE_SJIS: return "SJIS"; case KCODE_EUC: return "EUC"; case KCODE_UTF8: return…
リリースしました 出力のバッファを考慮のこと 書式文字列の2倍のサイズでよいかな? 書式にマルチバイトが含まれていたらどうしよう? JapaneseDateFormatに名前を変えて、JapaneseCalendarをadoptしたSimpleDateFormatのラッパにする $KCODEを見て出力文…