「basename()」の編集履歴(バックアップ)一覧はこちら

basename()」(2005/10/31 (月) 15:14:07) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

引数 char* name<br> <br> 返り値 char*<br> <br> <br> <br>   static char base[IM_NAME_MAX];<br>   char *p, *bp= base;<br> <br>   if ((p= strchr(name, ':')) != nil) {<br>     while (name &lt;= p &amp;&amp; bp &lt; base + IM_NAME_MAX - 1) {<br>       *bp++ = *name++;<br>     }<br>   }<br> <br> ↑"base" に "name"の':'までの左側をコピー?<br> <br> <br>   for (;;) {<br>     if ((p= strrchr(name, '/')) == nil) {<br>       p= name;<br>       break;<br>     }<br>     if (*++p != 0) break;<br>     *--p= 0;<br>   }<br> '/'が見つかったらその左側を"p"が指す。なければ何もしない<br> <br> <br>   while (*p != 0 &amp;&amp; bp &lt; base + IM_NAME_MAX - 1) {<br>     *bp++ = *p++;<br>   }<br> <br> '/'が見つかったらその左がわを"base"にコピーする<br> つまり':' から '/'までを取り除いたものをbaseにに格納する。<br> '/'がなければ何もしない。<br> <br> <br> <br>   *bp= 0;<br>   return base;<br> }<br> <br> 語尾に'0'を付与して"base"返す。<br> <br> この関数は<br>   static char base[IM_NAME_MAX];<br> を返す。staticなので普通のローカル変数と違って安心なはず。<br> <br> <br> 以下全文<br> <br> char *basename(char *name)<br> /* Return the last component of name, stripping trailing slashes from name.<br> * Precondition: name != "/". If name is prefixed by a label, then the<br> * label is copied to the basename too.<br> */<br> {<br>   static char base[IM_NAME_MAX];<br>   char *p, *bp= base;<br> <br>   if ((p= strchr(name, ':')) != nil) {<br>     while (name &lt;= p &amp;&amp; bp &lt; base + IM_NAME_MAX - 1) {<br>       *bp++ = *name++;<br>     }<br>   }<br>   for (;;) {<br>     if ((p= strrchr(name, '/')) == nil) {<br>       p= name;<br>       break;<br>     }<br>     if (*++p != 0) break;<br>     *--p= 0;<br>   }<br>   while (*p != 0 &amp;&amp; bp &lt; base + IM_NAME_MAX - 1) {<br>     *bp++ = *p++;<br>   }<br>   *bp= 0;<br>   return base;<br> }<br> <br> <br> <br>

表示オプション

横に並べて表示:
変化行の前後のみ表示:
目安箱バナー