Archive-Unzip-Burst
view release on metacpan or search on metacpan
unzip-6.0/os2/os2.c view on Meta::CPAN
return MPN_NOMEM;
}
Trace((stderr, "rootpath now = [%s]\n", FnFilter1(G.os2.rootpath)));
}
return MPN_OK;
}
#endif /* !SFX || SFX_EXDIR */
/*---------------------------------------------------------------------------
END: free rootpath, immediately prior to program exit.
---------------------------------------------------------------------------*/
if (FUNCTION == END) {
Trace((stderr, "freeing rootpath\n"));
if (G.os2.rootlen > 0) {
free(G.os2.rootpath);
G.os2.rootlen = 0;
}
return MPN_OK;
}
return MPN_INVALID; /* should never reach */
} /* end function checkdir() */
/***********************/
/* Function isfloppy() */ /* more precisely, is it removable? */
/***********************/
static int isfloppy(nDrive)
int nDrive; /* 1 == A:, 2 == B:, etc. */
{
uch ParmList[1] = {0};
uch DataArea[1] = {0};
char Name[3];
HFILE handle;
#ifdef __32BIT__
ULONG rc;
ULONG action;
#else
USHORT rc;
USHORT action;
#endif
Name[0] = (char) (nDrive + 'A' - 1);
Name[1] = ':';
Name[2] = 0;
rc = DosOpen(Name, &handle, &action, 0L, FILE_NORMAL, FILE_OPEN,
OPEN_FLAGS_DASD | OPEN_FLAGS_FAIL_ON_ERROR |
OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE, 0L);
if (rc == ERROR_NOT_READY) /* must be removable */
return TRUE;
else if (rc) { /* other error: do default a/b heuristic instead */
Trace((stderr, "error in DosOpen(DASD): guessing...\n", rc));
return (nDrive == 1 || nDrive == 2)? TRUE : FALSE;
}
rc = DosDevIOCtl(DataArea, sizeof(DataArea), ParmList, sizeof(ParmList),
DSK_BLOCKREMOVABLE, IOCTL_DISK, handle);
DosClose(handle);
if (rc) { /* again, just check for a/b */
Trace((stderr, "error in DosDevIOCtl category IOCTL_DISK, function "
"DSK_BLOCKREMOVABLE\n (rc = 0x%04x): guessing...\n", rc));
return (nDrive == 1 || nDrive == 2)? TRUE : FALSE;
} else {
return DataArea[0] ? FALSE : TRUE;
}
} /* end function isfloppy() */
static int IsFileNameValid(const char *name)
{
HFILE hf;
#ifdef __32BIT__
ULONG uAction;
#else
USHORT uAction;
#endif
switch( DosOpen((PSZ) name, &hf, &uAction, 0, 0, FILE_OPEN,
OPEN_ACCESS_READONLY | OPEN_SHARE_DENYNONE, 0) )
{
case ERROR_INVALID_NAME:
case ERROR_FILENAME_EXCED_RANGE:
return FALSE;
case NO_ERROR:
DosClose(hf);
default:
return TRUE;
}
}
/**********************/
/* Function map2fat() */
/**********************/
static void map2fat(pathcomp, pEndFAT)
char *pathcomp, **pEndFAT;
{
char *ppc = pathcomp; /* variable pointer to pathcomp */
char *pEnd = *pEndFAT; /* variable pointer to buildpathFAT */
char *pBegin = *pEndFAT; /* constant pointer to start of this comp. */
char *last_dot = (char *)NULL; /* last dot not converted to underscore */
int dotname = FALSE; /* flag: path component begins with dot */
/* ("." and ".." don't count) */
register unsigned workch; /* hold the character being tested */
/* Only need check those characters which are legal in HPFS but not
* in FAT: to get here, must already have passed through mapname.
* (GRR: oops, small bug--if char was quoted, no longer have any
* knowledge of that.) Also must truncate path component to ensure
* 8.3 compliance...
*/
while ((workch = (uch)*ppc++) != 0) {
switch (workch) {
( run in 5.633 seconds using v1.01-cache-2.11-cpan-c221a9de4ec )