2009年2月4日水曜日

libcurl のfileプロトコル

libcurlではhttp以外にもいろんなプロトコルが使えるようになっていて,当然fileも使える.が,httpでは動くcontent-lengthだけを取るやり方がうまく動かない.

HEADERとNOBODYを指定して,performしたあとで,CONTENT_LENGTH_DOWNLOADを取ると長さが分かる.

  curl_easy_setopt(dwHandle, CURLOPT_URL, url);
  curl_easy_setopt(dwHandle, CURLOPT_HEADER, 1);
  curl_easy_setopt(dwHandle, CURLOPT_NOBODY, 1);
  curl_easy_setopt(dwHandle, CURLOPT_WRITEFUNCTION, &func);
  curl_easy_perform(dwHandle);
  curl_easy_getinfo(dwHandle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &dSize);
httpの場合は,head メソッドを使ってcontent-lengthだけ取得しているのだろう.fileの場合はstatでとればいいのでさらに簡単なはずなのだが.

しかたがないのでソースをダウンロードして追ってみると,ちゃんとstatはしている.にもかかわらず,外のプログラムからアクセスできる構造体に設定していないようだった.ので,そこだけちょっと修正したら,動いているっぽい.

とりあえず,MLでレポートしておいたが,さてどうしたものか.CURLにパッチ当てなければ動かないのではソフトとしてリリースできないしなあ...

1 件のコメント:

hidemon さんのコメント...

なんと,もうコミットされたらしい...はやい!