Cやってみよう #4
先日の続き
おそろしい、C言語は恐ろしい。
たった10数行にも関わらず、頭に入ってこない。
俺の目と頭が連動しない...
慣れるしか無いのか!
112 static int check_extension(char *filename, apr_array_header_t *exts) 113 { 114 int i; 115 for (i = 0; i < exts->nelts; i++) { 116 const char *extension = ((char **)exts->elts)[i]; 117 ssize_t name_len = strlen(filename) - strlen(extension); 118 if (name_len >= 0 && strcmp(&filename[name_len], extension) == 0) 119 return 1; 120 } 121 return 0; 122 }
- 112行目で引数を2つもらう関数を定義してる。返り値は
int
- 115行目の
exts->nelts
は数値なのであろう。これは配列の要素数なんだろう。 - 116行目の
const char
は読み取り専用の文字列に配列の内容を入れているのだろう! - 116行目の
(char **)
これはなんだ?- Dereferencingとな
- 変数のアドレスから値を取得する
- Dereferencingとな
- 117行目の
ssize_t
は、書き込まれたバイト数,エラー時は-1
- 117行目はファイル名の文字数から配列の要素の文字数を引いて、
name_len
にいれとる。 - 118行目の
strcmp
は文字列比較 - 結果、この関数は
0
or1
を返す
次々
124 static char *build_vhostport_name(request_rec *r) 125 { 126 #ifdef __APACHE24__ 127 ssize_t vhostport_len; 128 char *vhostport; 129 130 vhostport_len = strlen(r->hostname) + sizeof(":65536"); 131 vhostport = apr_pcalloc(r->pool, vhostport_len); 132 apr_snprintf(vhostport, vhostport_len, "%s:%d", r->hostname, r->connection->local_addr->port); 133 134 return vhostport; 135 #else 136 return (char *)r->hostname; 137 #endif 138 }
- 124行目で引数を1つもらう関数を定義してる。返り値は
char
- 124行目の
request_rec
はapacheの持ってる構造体をrというアドレスに定義?してる #
はコメントアウトなの?- 130行目で
vhostport_len
にこの場合はvirtualhostの長さと65536のメモリサイズを足した値を返してる- よくわからん
- 131行目は
apr_pcalloc
で初期化してる - 132行目は
apr_snprintf
ぐぐってもわからん。 - 結局この関数は
hoge.com:80
みたいなものを返してるのではないだろうか。
ちょっと憶測が多くなってきて、ぐぐっても分からないので有識者に聞こう。。。
聞いたら更新しますからね!