トップ «前の日(05-17) 最新 次の日(05-19)»

PC関係のメモ


WebDAVクライアント(2) / 構造体を宣言時にゼロクリア / ブログはコテハンで書くべきか、捨てハンで書くべきか / COMとpimplイディオム

WebDAVクライアント(2)

neonにopensslをリンクしてhttps通信に成功。ただしまだ証明書とか見てない。

あとはzlibをリンクして圧縮通信に対応させると、HTTPクライアントとしては十分な機能を備えることになるかな。

zlibをリンクするのは簡単そうだし、他の実装が終わったあとにでも作業する。httpsを先に試したのは後でつまづきそうだったから。

構造体を宣言時にゼロクリア

neonライブラリに下記のようなコードがあった。

struct fetch_context ctx = {0};

構造体を0クリアしているんだとわかるんだけど、よく考えてみると違和感がある。

つまり、{0}は構造体の最初のメンバーだけを初期化しているのであって、以降のメンバーは不定値なのでは?という疑問。

調べてみたところ、次のような理由によってゼロクリアされるということがわかった。

{0}は構造体を「0で埋める」ための特別な記述ではなく(当たり前なんだけど)、最初のメンバーに0で初期化するのみ。ただ、「初期化子が省略された場合に残りのメンバーを0で初期化する」という仕様((-これはあとで確信できるソースを探しておこう。K&Rに書いてあったっけ?-))のため結果として構造体全体が0で埋められるのである。

これでいちいち::ZeroMemory()とかmemset()しなくてもこの書き方で初期化できる。

こんなときに便利。

const struct hoge empty = {0};
static struct hoge empty = {0};

COMとpimplイディオム

どちらも軽く本で読んだだけだけど似てる気がする。

最終更新時刻: 2008年10月28日

WebDAVとWindows クライアント

http://plan9.aichi-u.ac.jp/webdav/win.html

WebDAVが普及しない最も大きな理由の一つが、MS純正クライアントがあんまりなせいだと思う。

最終更新時刻: 2009年05月18日
コメント(2) [コメントを投稿する]

_ haru-s [ですよね]

_ Hajime [あれがちゃんとしてれば超便利なんですけどね~]


msysgit+BASIC認証の不具合と回避策

msysgitでBASIC認証を使ったページからcloneしようとすると途中でBASIC認証が効かなくなってcloneできなかった。

LinuxのGitクライアントからは問題なくcloneできる。

使用したバージョンは下記。

Git-1.7.4-preview20110204.exe
msysGit-fullinstall-1.7.4-preview20110204.exe

その時のエラーメッセージは下記。(URLは例)

error: The requested URL returned error: 401 (curl_result = 22, http_code = 401,
 sha1 = 3f00ca6fd69c2fe3fff8fefe8c46c8d8c2379b89)
error: Unable to find 3f00ca6fd69c2fe3fff8fefe8c46c8d8c2379b89 under http://dav.example.com/exsample.git
Cannot obtain needed commit 3f00ca6fd69c2fe3fff8fefe8c46c8d8c2379b89
while processing commit a250db46bf02c5a27a73ac01e629f69d1f8d9d28.
error: Fetch failed.

Webサーバ側のログを見ると、最初はBASIC認証使っているのに、途中からなぜか認証せずにアクセスしようとして取得に失敗している。

回避策はURLにBASIC認証のユーザ名を含めてあげること。(URLは例)

http://ユーザ名@dav.example.com/example.com
最終更新時刻: 2011年05月16日