トップ «前の日記(2014-05-28) 最新 次の日記(2014-05-30)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2014-05-29 :-(

_ 午前

0530 起床

0700 食堂

0830 出勤 && lint祭り

_ 午後

1300 lint祭り

_

1745 退勤

1830 日記巡回など

2130 飯。鮭

_ [NetBSD][/bin/ln][ln][コードリーディング]NetBSD /bin/ln を読む

ソース src/bin/ln/ln.c

使用例

ln -s src dst

流れ

main
linkit
link または symlink

コード読む

main の外にグローバル変数が宣言されている。関数ポインタへの変数

static int (*linkf)(const char *, const char *);

main() はこう。

-s した場合は symlink を設定し、そうでなければ link を使う。

  if (sflag) {
    linkf  = symlink;
    linkch = '-';
  } else {
    linkf  = link;
    linkch = '=';
  }

dst がディレクトリでなければここを通っておしまい。

  switch(argc) {
  case 0:
    usage();
    /* NOTREACHED */
  case 1:        /* ln target */
    exit(linkit(argv[0], ".", 1));
    /* NOTREACHED */

  // ln -s src dst だとここを通る
  case 2:        /* ln target source */
    exit(linkit(argv[0], argv[1], 0));
    /* NOTREACHED */
  }

linkit() を読む

lstat してファイル存在有無確認してるらしい lstat - NetBSD Manual Pages lstat の戻り値は以下のとおり。正常なら 0 、そうでないなら -1 が返る。

RETURN VALUES
     The stat(), lstat(), fstat(), and fstatat() functions return the value 0
     if successful; otherwise the value -1 is returned and the global variable
     errno is set to indicate the error.

というわけで

  // 正常ならば exists は 1 になる
  exists = !lstat(source, &sb);


  // ln -f src dst と呼ばれたら以下が通る
  // 一度 unlink つまり削除しているらしい。えー
  /*
   * If the file exists, then unlink it forcibly if -f was specified
   * and interactively if -i was specified.
   */
  if (fflag && exists) {
    if (unlink(source)) {
      warn("%s", source);
      return (1);
    }

最後に linkf で link または symlink を呼び出す。

  /* Attempt the link. */
  if ((*linkf)(target, source)) {
    warn("%s", source);
    return (1);
  }

_ [艦これ]艦これ 2-5 沖ノ島沖戦闘哨戒

「同方面に敵反攻の兆候が報告された。巡洋艦を中心に哨戒部隊を編成、敵艦隊の動向を探れ!」

2-5 をクリアするのを忘れいていた。こんな編成で行った。とりあえず 2 回撃破。あと 2 回。

ルート確定

1 回目撃破。ボス前で艦娘が 100 人になっていたのでボスドロップなし。

2 回目撃破。今度は 96 人にしておいた。

鬼怒さん( N 人目 )ドロップ。そして近代化改修へ

毎回満身創痍です。