developer's diary

最近はc#のエントリが多いです

C初心者がmemcached-1.4.5を追いかける。(23)

C初心者がmemcached-1.4.5を追いかける。(22)の続き
ソースはコチラにてDLしました。

getoptで受け取ったパラメータによって処理を行っている部分を追いかける。

memcached.c(4403行目あたり)

        case 'D':
            if (! optarg || ! optarg[0]) {
                fprintf(stderr, "No delimiter specified\n");
                return 1;
            }
            settings.prefix_delimiter = optarg[0];
            settings.detail_enabled = 1;
            break;
          "D:"  /* prefix delimiter? */

optargでifしている。optargをチェック。
404 - エラー: 404

現在の argv 要素にテキストがあれば (つまり、"-oarg" のように、オプション名自身と同じワード内に テキストがある場合)、それが optarg に返される。 なければ optarg は 0 に設定される。

上記の意味でifでは以下のことを行っている?

  • Dオプションの引数に何も設定していない場合エラーとする
  • Dオプションの引数に0から始まる文字列を設定した場合エラーとする

このへんは動かしてみないと机上の空論になりそう。:TODOってことにしよう。


settings.prefix_delimiterに引数の値(1文字目)を設定
settings.detail_enabledに1を設定

struct settings {
    settings.prefix_delimiter = ':';
    settings.detail_enabled = 0;
static void settings_init(void) {
    char prefix_delimiter;  /* character that marks a key prefix (for stats) */
    int detail_enabled;     /* nonzero if we're collecting detailed stats */

初期処理では、settings.prefix_delimiter に':'、
settings.detail_enabledに0を設定している。

続きは↓
C初心者がmemcached-1.4.5を追いかける。(24)(Lオプション)