/*
 *	libgen.h
 *
 *	definitions for pattern matching functions
 *
 *	* Wed Oct 14 21:50:46 JST 2015 Naoyuki Sawa
 *	- 1st リリース。
 *	- libgen.hは、POSIX.1-2001に準拠しています。
 *	  (http://www.opengroup.org/onlinepubs/9699919799/basedefs/libgen.h.html)
 *	- dirname(),basename()の実装は、cliplibc.c に有ります。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 */
#ifndef __LIBGEN_H__
#define __LIBGEN_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
// * Wed Oct 14 21:50:46 JST 2015 Naoyuki Sawa
// - □「Linux Programmer's Manual - BASENAME」(http://linuxjm.osdn.jp/html/LDP_man-pages/man3/basename.3.html)より引用:
//   │dirname()とbasename()は、ヌルで終端されたパス名の文字列を、ディレクトリ部分・ファイル名部分に分割する。
//   │dirname()は最後の'/'までの部分(最後の'/'は含まない)を返し、basename()は最後の'/'以降の部分を返す。
//   厳密には上記以外にも細かな仕様が有るのだが、実用上は上記だけで十分なので、当モジュールでは単純に実装する事にした。
// - basename()には二種類の異なるバージョンが有る。一つはPOSIXバージョンであり、もう一つはGNUバージョンである。
//   │GNUバージョンは引き数を変更することはなく、pathの末尾が'/'の場合は空の文字列を返す。
//   当モジュールのbasename()は、GNUバージョンに準拠する事にした。従って、basename()に定数文字列を指定する事が出来る。
// - 実際の所、dirname()を使う事はあまり無く、basename()を使う事の方が多いと思う。
//   なぜなら、複雑なパス解析を行う場合は、単純なdirname(),basename()ではなく、splitpath()を使うと思うからだ。
//   dirname(),basename()を使うのは、単純に済ませたいケースであり、具体的には、エラーメッセージの中にベース名だけを表示したいケース等である。
//   たとえば、以下のように使用する事が多いだろう。
//   │die("error at %s(%d)", basename(__FILE__), __LINE__);
//   この時、POSIXバージョンだとbasename()定数領域の文字列を書き換えようとしてしまい、不正な動作になる。
//   GNUバージョンならば、引数文字列を書き換えないので、上記のように使用する事が出来、都合が良い。
// - 尚、dirname()は引数文字列を書き換えるので、上記のような用途に使用する事は出来ない。
//   前述の通り、実際にdirname()を使う事はあまり無いだろうが、もし使用する場合は注意せよ。
char* dirname(char* path);	//引数pathに定数文字列を指定する事は出来ません。
char* basename(char* path);	//当実装では引数pathに定数文字列を指定出来ます。
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__LIBGEN_H__
