예제 #1
0
파일: DRIVE.C 프로젝트: ngphloc/agmagic
int __cdecl _getdrive (
        void
        )
{
        OSErr osErr;
        WDPBRec wdPB;
        char st[256];

        wdPB.ioNamePtr = &st[0];
        osErr = PBHGetVolSync(&wdPB);
        if (osErr)
        {
            return 0;
        }


        return wdPB.ioWDVRefNum;
}
int __cdecl _chdir (
        const char *path
        )
{
        WDPBRec wdPB;
        char st[256];
        OSErr osErr;
        ParamBlockRec  parm;

        if (!*path)
        {
                errno = ENOENT;
                return -1;
        }

        strcpy(st, path);
        wdPB.ioNamePtr = _c2pstr(st);
        wdPB.ioVRefNum = 0;
        wdPB.ioWDDirID = 0;
        osErr = PBHSetVolSync(&wdPB);

        if (osErr) {
                /* error occured -- map error code and return */
                _dosmaperr(osErr);
                return -1;
        }

        osErr = PBHGetVolSync(&wdPB);

        if (osErr) {
                /* error occured -- map error code and return */
                _dosmaperr(osErr);
                return -1;
        }

        CurDirStore = wdPB.ioWDDirID;
        SFSaveDisk =  wdPB.ioWDVRefNum;

        memset(&parm, 0, sizeof(ParamBlockRec));
        osErr = PBSetVolSync(&parm);

        return 0;
}
예제 #3
0
파일: filemac.c 프로젝트: JerryZhou/opensc
void
file_dirscan( 
	const char *dir,
	scanback func,
	void	*closure )
{
	PATHNAME f;
	char filename[ MAXJPATH ];
	unsigned char fullPath[ 512 ];

	FSSpec spec;
	WDPBRec vol;
	Str63 volName;	
	CInfoPBRec lastInfo;
	int index = 1;
	
	/* First enter directory itself */

	memset( (char *)&f, '\0', sizeof( f ) );

	f.f_dir.ptr = dir;
	f.f_dir.len = strlen(dir);

	if( DEBUG_BINDSCAN )
	    printf( "scan directory %s\n", dir );
		
	/* Special case ":" - enter it */

	if( f.f_dir.len == 1 && f.f_dir.ptr[0] == ':' )
	    (*func)( closure, dir, 0 /* not stat()'ed */, (time_t)0 );

	/* Now enter contents of directory */

	vol.ioNamePtr = volName;
	
	if( PBHGetVolSync( &vol ) )
		return;

	CopyC2PStr( dir, fullPath );
	
	if( FSMakeFSSpec( vol.ioWDVRefNum, vol.ioWDDirID, fullPath, &spec ) )
		return;
	
      	lastInfo.dirInfo.ioVRefNum 	= spec.vRefNum;
   	lastInfo.dirInfo.ioDrDirID 	= spec.parID;
   	lastInfo.dirInfo.ioNamePtr 	= spec.name;
   	lastInfo.dirInfo.ioFDirIndex 	= 0;
   	lastInfo.dirInfo.ioACUser 	= 0;
			
   	if( PBGetCatInfoSync(&lastInfo) )
		return;

	if (!(lastInfo.dirInfo.ioFlAttrib & 0x10))
		return;

	// ioDrDirID must be reset each time.
	
	spec.parID = lastInfo.dirInfo.ioDrDirID;
		
	for( ;; )
	{
       	    lastInfo.dirInfo.ioVRefNum 	= spec.vRefNum;
	    lastInfo.dirInfo.ioDrDirID	= spec.parID;
	    lastInfo.dirInfo.ioNamePtr 	= fullPath;
	    lastInfo.dirInfo.ioFDirIndex = index++;
	   		
	    if( PBGetCatInfoSync(&lastInfo) )
		return;
			
	    f.f_base.ptr = (char *)fullPath + 1;
	    f.f_base.len = *fullPath;
	    
	    path_build( &f, filename, 0 );

	    (*func)( closure, filename, 0 /* not stat()'ed */, (time_t)0 );
	}
}