亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? curpath.c

?? PDA上的CF CARD 文件系統的建立程式
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*************************************************************
File Name: curpath.C
Last Modified Date: 2001/04/17
Programmer: MSC
Compiler:
Platform:
Usage:
	Current path API set.
**************************************************************/
#include <sys/syscall.h>

#include <stdio.h>
#include <string.h>

//#include "../rDebug/include/rdebug.h"
#include "../include/filesys.h"

#ifdef FS_CURRENT_DIRECTORY_ENABLED


// current pathname
static unsigned char *CurrentPath[DEVICE_NUM] = { NULL, NULL, NULL, NULL };


// FileSys.c
extern int CurrentDrive;

/* marked by chilong 01/15/2002
extern unsigned char *Pathname1;
   marked by chilong 01/15/2002 */

/**** added by chilong ****/
extern short FileSysDeviceTable[DEVICE_NUM];
/**** added by chilong ****/


/*************************************************************
Function: initCurrentPath
Description:
	Initialize the current path.
Return value:
	 0: init succeeded
	-1: init failed
**************************************************************/
int initCurrentPath(void)
{
  int i;
  unsigned char *pathBuf;

  pathBuf = (unsigned char *)ap_malloc(DEVICE_NUM * (MAX_PATHNAME_LEN + 2));
  if (pathBuf == NULL)
  {
	FileSys_Errno = ERROR_ALLOC_MEM;
	return -1;
  }

  for (i = 0; i < DEVICE_NUM; i++)
	CurrentPath[i] = (unsigned char *)((unsigned long)pathBuf + i * (MAX_PATHNAME_LEN + 2));
  
  // the current path after initialization is "\\"
  resetAllCurrentPath();
  return 0;
}



/*************************************************************
Function: resetAllCurrentPath
Description:
	Reset the current path.
Return value:
	 0: reset succeeded
	-1: reset failed
**************************************************************/
int resetAllCurrentPath(void)
{
  int i;

  for (i = 0; i < DEVICE_NUM; i++)
  {
	if (CurrentPath[i] == NULL)
		return -1;

	CurrentPath[i][0] = '\\';
	CurrentPath[i][1] = '\0';
  }

  return 0;
}



/*************************************************************
Function: resetCurrentPath
Description:
	Reset the specified current path.
Input:
	driveNO - the drive number (0 = A:, 1 = B:, ...)
Return value:
	 0: reset succeeded
	-1: reset failed
**************************************************************/
int resetCurrentPath(int driveNO)
{
  if (checkDrive(driveNO) == -1)
  {
	FileSys_Errno = ERROR_INVALID_DRIVE;
	return -1;
  }

  if (CurrentPath[driveNO] == NULL)
	return -1;

  CurrentPath[driveNO][0] = '\\';
  CurrentPath[driveNO][1] = '\0';

  return 0;
}



/*************************************************************
Function: getCompletePath
Description:
	Merge the given partial pathname with the current directory
	to give a complete pathname
Input:
	driveNO - the drive number (0 = A:, 1 = B:, ...)
	partialName - the given pathname
Output:
	completeName - the complete pathname
Return value:
	 0: merge succeeded
	-1: merge failed
**************************************************************/
int getCompletePath(int driveNO, unsigned char *partialName, unsigned char *completeName)
{
  int nameTail = 0;
  int i = 0;

  #ifdef FILESYS_DEBUG
	sprintf(FS_DebugString, "[getCompletePath] driveNO = %d, partialName = %s", driveNO, partialName);
	SprintStringLn(FS_DebugString);
	sprintf(FS_DebugString, "    currentPath = %s", CurrentPath[driveNO]);
	SprintStringLn(FS_DebugString);
  #endif

  if (checkDrive(driveNO) == -1)
  {
	FileSys_Errno = ERROR_INVALID_DRIVE;
	return -1;
  }

  if (partialName[0] == '\\' || partialName[0] == '/')
  {
	// the given pathname is a complete pathname
	do
	{
		completeName[nameTail] = partialName[nameTail];
		nameTail++;
		if (nameTail >= MAX_PATHNAME_LEN)
		{
			completeName[0] = '\0';
			FileSys_Errno = ERROR_PATHNAME_TOO_LONG;
			return -1;
		}
	} while (completeName[nameTail - 1] != '\0');

	return 0;
  }

  // copy the current directory name to the complete pathname
  while (CurrentPath[driveNO][nameTail] != '\0')
  {
	completeName[nameTail] = CurrentPath[driveNO][nameTail];
	nameTail++;

	if (nameTail >= MAX_PATHNAME_LEN)
	{
		// current directory name corrupted
		// reset current directory to "\"
		memoryZero((void *)CurrentPath[driveNO], MAX_PATHNAME_LEN);
		CurrentPath[driveNO][0] = '\\';
		CurrentPath[driveNO][1] = '\0';

		// the complete pathname is also "\"
		completeName[0] = '\0';

		FileSys_Errno = ERROR_CURRENT_DIRECTORY_BAD;

		return -1;
	}
  }

//  if (completeName[nameTail - 1] == '\\' || completeName[nameTail - 1] == '/')
  if (nameTail > 0 && completeName[nameTail - 1] == '\\' || completeName[nameTail - 1] == '/')
  {
	completeName[nameTail] = '\0';
  }
  else
  {
	completeName[nameTail++] = '\\';
	completeName[nameTail] = '\0';
  }

  while (partialName[i] != '\0')
  {
	if (partialName[i] == '.')
	{
		i++;

		if (partialName[i] == '.')
		{
			// name is ".."
			i++;

			if (partialName[i] == '\\' || partialName[i] == '/' || partialName[i] == '\0')
			{
				// name is "..\\" or "..\0"
				while (partialName[i] == '\\' || partialName[i] == '/')
					i++;

				// the complete directory name loops back one directory level
				if (nameTail > 1)
				{
					// go before the last '\\'
					nameTail -= 2;
				}
				else
				{
					// the complete directory is already "\\", can't go back
					completeName[0] = '\0';
					FileSys_Errno = ERROR_INVALID_PATHNAME;
					return -1;
				}

				/* marked by chilong 02/05/2002
				while (completeName[nameTail] != '\\' && completeName[nameTail] != '/' && nameTail > 0)
				{
					nameTail--;
				}
				   marked by chilong 02/05/2002 */

				/**** modified by chilong 02/05/2002 ****/
				while (1)
				{
				#ifdef CHINESE_CODE_USED
					if ( (completeName[nameTail] <= 0x80 && completeName[nameTail] == '\\') ||
						(completeName[nameTail] <= 0x80 && completeName[nameTail] == '/') || 
						nameTail <= 0)
						break;
				#else
					if (completeName[nameTail] == '\\' || completeName[nameTail] == '/' || nameTail <= 0)
						break;
				#endif
						
					nameTail--;
				}
				/**** modified by chilong 02/05/2002 ****/

				if (partialName[i] == '\0')
				{
//					completeName[nameTail] = '\0';
					/**** modified by chilong ****/
					if (nameTail != 0)
						completeName[nameTail] = '\0';
					else
						completeName[1] = '\0';
					/**** modified by chilong ****/
						
						
					return 0;
				}
				else
				{
					nameTail++;
					completeName[nameTail] = '\0';
				}
			}
			else
			{
				// name is not "..\\" or "..\0"
				completeName[0] = '\0';
				FileSys_Errno = ERROR_INVALID_PATHNAME;
				return -1;
			}
		}
		else if (partialName[i] == '\\' || partialName[i] == '/')
		{
			// name is ".\\"
			while (partialName[i] == '\\' || partialName[i] == '/')
				i++;
		}
		else
		{
			// partial directory name incorrect
			completeName[0] = '\0';
			FileSys_Errno = ERROR_INVALID_PATHNAME;
			return -1;
		}
	}
	else
	{
		// append a level of directory from given pathname to complete pathname
		while (partialName[i] != '\\' && partialName[i] != '/' && partialName[i] != '\0')
		{
			/* marked by chilong 02/05/2002 
			completeName[nameTail] = partialName[i];
			nameTail++;
			i++;
			   marked by chilong 02/05/2002 */
			   
			/**** modified by chilong 02/05/2002 ****/
		#ifdef CHINESE_CODE_USED
			if (partialName[i] > 0x80)
			{
				completeName[nameTail] = partialName[i];
				completeName[nameTail+1] = partialName[i+1];
				nameTail+=2;
				i+=2;
			}
			else
			{
				completeName[nameTail] = partialName[i];
				nameTail++;
				i++;
			}
		#else
			completeName[nameTail] = partialName[i];
			nameTail++;
			i++;
		#endif
			/**** modified by chilong 02/05/2002 ****/

			if (nameTail >= MAX_PATHNAME_LEN)
			{
				// pathname too long
				completeName[0] = '\0';
				FileSys_Errno = ERROR_PATHNAME_TOO_LONG;
				return -1;
			}
		}

		if (partialName[i] == '\0')
		{
			completeName[nameTail] = '\0';
			return 0;
		}
		else if (partialName[i] == '\\' || partialName[i] == '/')
		{
			completeName[nameTail] = '\\';
			nameTail++;
			i++;
		}
		else
		{
			completeName[0] = '\0';
			FileSys_Errno = ERROR_INVALID_PATHNAME;
			return -1;
		}
	}
  }

  completeName[nameTail] = '\0';

  return 0;
}



/*************************************************************
Function: checkPath
Description:
	check to see if the pathname is valid
Input:
	driveNO - the drive number (0 = A:, 1 = B:, ...)
	pathname - the complete pathname
Return value:
	 0: pathname valid
	-1: pathname invalid
**************************************************************/
int checkPath(int driveNO, unsigned char *pathname)
{
  struct _stat status;
  int origDrive;
//  int returnValue = 0;

  #ifdef FILESYS_DEBUG
	sprintf(FS_DebugString, "[checkPath] driveNO = %d, pathname = %s", driveNO, pathname);
	SprintStringLn(FS_DebugString);
  #endif

  if (FileSys_Running == 0)
  {
	FileSys_Errno = ERROR_FILE_SYSTEM_NOT_INIT;
	return -1;
  }

  if (checkDrive(driveNO) == -1)
  {
	FileSys_Errno = ERROR_INVALID_DRIVE;
	return -1;
  }

  origDrive = fs_getdrive();
  
  // we change drive here but if this functions fails,
  // we'll change CurrentDrive back to origDrive
  CurrentDrive = driveNO;

  #ifdef FILESYS_DEBUG
	sprintf(FS_DebugString, "    original driveNO = %d", origDrive - 1);
	SprintStringLn(FS_DebugString);
  #endif
/*
  if (origDrive != driveNO + 1)
  {
	if (chdrive(driveNO + 1) == -1)
		return -1;
  }
*/

  /* marked by chilong 01/15/2002 
  if (stat(pathname, &status) == -1)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情偷乱视频一区二区三区| 欧美精品一区二区三区一线天视频| 欧美国产在线观看| 国产另类ts人妖一区二区| 久久久久国产精品人| 亚洲午夜一二三区视频| 亚洲国产成人91porn| 在线看日本不卡| 午夜不卡av免费| 欧美成人a在线| 成人精品gif动图一区| 亚洲免费伊人电影| 3d成人h动漫网站入口| 国产自产v一区二区三区c| 欧美国产一区在线| 欧美在线播放高清精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 精品毛片乱码1区2区3区| 成人免费毛片嘿嘿连载视频| 一区二区国产盗摄色噜噜| 欧美一区二区视频在线观看2022| 国产一区二区三区在线观看免费 | 国产凹凸在线观看一区二区| 国产精品久久久久久妇女6080| 色婷婷av一区| 六月丁香婷婷色狠狠久久| 中文幕一区二区三区久久蜜桃| 色狠狠桃花综合| 精品在线观看视频| 99免费精品视频| 欧美专区日韩专区| 国产一区二区福利| 亚洲成人av一区| 国产精品区一区二区三区| 欧美日韩国产经典色站一区二区三区 | 国产欧美精品区一区二区三区| 91看片淫黄大片一级在线观看| 免费精品99久久国产综合精品| 国产精品免费人成网站| 337p亚洲精品色噜噜噜| 99精品久久只有精品| 精品中文字幕一区二区小辣椒 | 欧美sm美女调教| 91极品美女在线| 国产成人自拍网| 欧美a级一区二区| 亚洲三级小视频| 久久久不卡网国产精品一区| 精品视频在线视频| 99视频精品免费视频| 久久国内精品自在自线400部| 亚洲美女屁股眼交3| 欧美激情一区二区三区四区| 日韩一区二区精品葵司在线| 在线中文字幕一区二区| 波多野洁衣一区| 韩国午夜理伦三级不卡影院| 亚洲123区在线观看| 亚洲精品免费在线观看| 国产日韩欧美一区二区三区综合| 日韩一级片网站| 日韩一区和二区| 欧美高清视频在线高清观看mv色露露十八| 波多野结衣91| 99视频热这里只有精品免费| 国产成人免费xxxxxxxx| 国产一区二区三区四区五区入口 | 亚洲成人精品影院| 一区二区三区四区在线播放 | 亚洲视频一二区| 中文字幕av一区二区三区免费看| 精品国产乱码久久久久久图片| 91精品国产入口| 69p69国产精品| 7799精品视频| 91精品国产综合久久精品| 正在播放亚洲一区| 666欧美在线视频| 日韩欧美黄色影院| 精品美女被调教视频大全网站| 日韩免费一区二区| 精品毛片乱码1区2区3区| 2023国产一二三区日本精品2022| 欧美电影免费观看完整版| 精品国产露脸精彩对白| 久久久精品国产免费观看同学| 久久久久久麻豆| 国产精品的网站| 亚洲精品日日夜夜| 亚洲国产欧美另类丝袜| 蜜臀av性久久久久蜜臀av麻豆| 美女精品自拍一二三四| 狠狠色丁香婷婷综合| 国产成人免费在线观看| 色综合中文字幕国产| 91亚洲永久精品| 欧美日本在线看| 精品久久久久一区| 一区精品在线播放| 五月婷婷久久综合| 国产一区二区在线视频| 91在线观看成人| 欧美老肥妇做.爰bbww| 久久综合色8888| 亚洲女爱视频在线| 奇米影视在线99精品| 成人免费视频caoporn| 欧洲精品一区二区三区在线观看| 91精品久久久久久久91蜜桃| 国产网红主播福利一区二区| 亚洲精品视频一区二区| 日本不卡一区二区三区| 粉嫩嫩av羞羞动漫久久久| 欧美性色aⅴ视频一区日韩精品| 精品入口麻豆88视频| 亚洲欧洲日韩一区二区三区| 日韩av电影一区| www.欧美.com| 欧美大白屁股肥臀xxxxxx| 亚洲视频一区二区在线| 久色婷婷小香蕉久久| 99久久久精品| 欧美精品一区二区三区在线| 亚洲欧美日韩久久| 精品亚洲国内自在自线福利| 在线观看亚洲a| 国产欧美一区二区精品仙草咪| 亚州成人在线电影| 成人黄页在线观看| 精品欧美一区二区三区精品久久 | 欧美视频在线观看一区| 久久青草欧美一区二区三区| 亚洲国产一区二区三区青草影视| 国产经典欧美精品| 日韩视频国产视频| 亚洲一区二区免费视频| 国产福利不卡视频| 欧美电影免费观看完整版| 亚洲高清三级视频| 99精品视频在线播放观看| 久久天堂av综合合色蜜桃网| 婷婷一区二区三区| 91成人在线观看喷潮| 国产精品全国免费观看高清| 国产一区视频导航| 91精品欧美综合在线观看最新| 亚洲猫色日本管| 97国产精品videossex| 国产欧美日韩在线看| 精品一区二区三区在线观看国产 | 欧美精品123区| 亚洲一区二区中文在线| www.欧美日韩| 中文字幕亚洲一区二区av在线| 国产精品1区2区| 国产日韩欧美精品综合| 国产精品白丝jk白祙喷水网站| 欧美大尺度电影在线| 蜜桃av一区二区三区电影| 51精品国自产在线| 日韩av午夜在线观看| 欧美精品久久99久久在免费线 | 国产精品久久久一区麻豆最新章节| 激情综合网激情| 久久综合九色综合久久久精品综合| 免费在线观看不卡| 日韩免费高清视频| 激情综合一区二区三区| 精品处破学生在线二十三| 国产一区二区久久| 国产欧美日产一区| 成人自拍视频在线观看| 国产精品久久久久三级| 一本色道久久加勒比精品| 亚洲另类中文字| 欧美日韩在线播放三区四区| 日韩制服丝袜先锋影音| 日韩一区二区三区电影在线观看 | 亚洲精品视频在线观看免费| 91久久国产最好的精华液| 亚洲一区二区三区美女| 91精品国产色综合久久| 国产一区二区精品在线观看| 中文字幕电影一区| 一本大道av一区二区在线播放 | 国产精品久久久久婷婷| 成人免费高清视频在线观看| 亚洲免费在线观看视频| 欧美精品久久久久久久多人混战| 久久成人免费网| 国产精品区一区二区三| 精品视频一区二区不卡| 久久精品久久精品| 国产精品美女一区二区| 在线观看国产日韩| 久久成人精品无人区| 国产精品久久久久久久久晋中| 欧洲色大大久久| 久久 天天综合| 最近中文字幕一区二区三区|