windows-nt/Source/XPSP1/NT/drivers/storage/tffsport/flparse.c
2020-09-26 16:20:57 +08:00

104 lines
3.6 KiB
C

/*
* $Log: V:/Flite/archives/TrueFFS5/Src/FLPARSE.C_V $
*
* Rev 1.2 Jan 29 2002 20:09:04 oris
* Added NAMING_CONVENTION prefix to flParsePath public routines.
*
* Rev 1.1 Apr 01 2001 07:59:42 oris
* copywrite notice.
*
* Rev 1.0 Feb 04 2001 11:40:12 oris
* Initial revision.
*
*/
/***********************************************************************************/
/* M-Systems Confidential */
/* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2001 */
/* All Rights Reserved */
/***********************************************************************************/
/* NOTICE OF M-SYSTEMS OEM */
/* SOFTWARE LICENSE AGREEMENT */
/* */
/* THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE */
/* AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT */
/* FOR THE SPECIFIC TERMS AND CONDITIONS OF USE, */
/* OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE: */
/* E-MAIL = info@m-sys.com */
/***********************************************************************************/
#include "fatlite.h"
#ifdef PARSE_PATH
/*----------------------------------------------------------------------*/
/* f l P a r s e P a t h */
/* */
/* Converts a DOS-like path string to a simple-path array. */
/* */
/* Note: Array length received in irPath must be greater than the */
/* number of path components in the path to convert. */
/* */
/* Parameters: */
/* ioreq->irData : address of path string to convert */
/* ioreq->irPath : address of array to receive parsed-path */
/* */
/* Returns: */
/* FLStatus : 0 on success, otherwise failed */
/*----------------------------------------------------------------------*/
FLStatus NAMING_CONVENTION flParsePath(IOreq FAR2 *ioreq)
{
char FAR1 *dosPath;
FLSimplePath FAR1 *sPath = ioreq->irPath;
unsigned offset = 0, dots = 0, chars = 0;
FLBoolean isExt = FALSE;
for (dosPath = (char FAR1 *) ioreq->irData; ; dosPath++) {
if (*dosPath == '\\' || *dosPath == 0) {
if (offset != 0) {
while (offset < sizeof(FLSimplePath))
sPath->name[offset++] = ' ';
if (chars == 0) {
if (dots == 2)
sPath--;
}
else
sPath++;
offset = dots = chars = 0;
isExt = FALSE;
}
sPath->name[offset] = 0;
if (*dosPath == 0)
break;
}
else if (*dosPath == '.') {
dots++;
while (offset < sizeof sPath->name)
sPath->name[offset++] = ' ';
isExt = TRUE;
}
else if (offset < sizeof(FLSimplePath) &&
(isExt || offset < sizeof sPath->name)) {
chars++;
if (*dosPath == '*') {
while (offset < (isExt ? sizeof(FLSimplePath) : sizeof sPath->name))
sPath->name[offset++] = '?';
}
else if (*dosPath >= 'a' && *dosPath <= 'z')
sPath->name[offset++] = *dosPath - ('a' - 'A');
else
sPath->name[offset++] = *dosPath;
}
}
return flOK;
}
#endif /* PARSE_PATH */