/*
 * lib_path.c
 *
 * Copyright 2005, Minoru Murashima. All rights reserved.
 * Distributed under the terms of the BSD License.
 *
 * パス文字列操作関数
 */


#include<types.h>
#include<fs.h>


/*
 * 文字列をNULL文字まで比較し一致したバイト数を返す。
 * parameters : Destination string,Sorce string
 */
int cmpString(const char *str1,const char *str2)
{
	int i;


	for(i=0;str1[i]&str2[i];++i)
		if(str1[i]!=str2[i])break;

	return i;
}


/*
 * cmpare path strings
 * parameters : Destination string(end='\0'),Sorce string(end='/' or '\0')
 * return : 一致=次のパスポインタ or 不一致=NULL;
 */
const char *cmpPathNull(const char *destPath,const char *srcPath)
{
	while (*destPath == *srcPath++)
		if (*destPath++ == '\0')
			return srcPath - 1;

	if ((*(srcPath - 1) == '/') && (*destPath == '\0'))
		return srcPath;
	else
		return NULL;
}


/*
 * 名前文字列とパス文字列を比較する。
 * parameters : destination name string,sorce path string,比較バイト数
 * return : 一致=0 or 大きい=1 or 小さい=-1
 */
int cmpPath(const char *name,const char *path,int count)
{
	int i;


	for (i = 0; i < count; ++i)
		if (name[i] != path[i])
		{
			if ((uchar)name[i] > (uchar)path[i])
				return 1;
			else
				return -1;
		}

	if ((path[count] == '/') || (path[count] == '\0'))
		return 0;

	return -1;
}


/*
 * パスの文字列サイズをはかる。
 * parmeters : path
 */
size_t pathLen(const char *path)
{
	const char *p=path;


	while(*p++!='/')
		if(*p=='\0')return (size_t)(p-path);

	return (size_t)(p-path-1);
}


/*
 * パスがラストパスかどうかを判定する。
 * parameters : path
 * return : name size or failed=-1;
 */
int isLastPath(const char *path)
{
	int i;


	for (i = 0; path[i] != '\0'; ++i)
		if ((path[i] == '/') && (path[i + 1] != '\0'))
			return -1;

	return i;
}


/*
 * 名前文字列とパス文字列を比較する。
 * 一致したら引数に次のパスアドレスを代入する。
 * parameters : destination name string,sorce path string pointer
 * return : 一致=0 or 大きい=1 or 小さい=-1
 */
/*int cmpPath(const char *name,const char **path)
{
	const char *p=*path;


	while(*name==*p++)
		if(*name++=='\0')
		{
			*path=p-1;
			return 0;
		}

	if((*--p=='/')&&(*name=='\0'))
	{
		*path=p+1;
		return 0;
	}
	if(*name>*p)return 1;
	return -1;
}
*/
