Esempio n. 1
0
int __cdecl _mkdir (
        const char *path
        )
{
        /* ask OS to create directory */
        HParamBlockRec hparamBlock;
        char st[256];
        OSErr osErr;

        if (!*path)
        {
            errno = ENOENT;
            return -1;
        }
        strcpy(st, path);
        hparamBlock.fileParam.ioNamePtr = _c2pstr(st);
        hparamBlock.fileParam.ioVRefNum = 0;
        hparamBlock.fileParam.ioDirID = 0;
        osErr = PBDirCreateSync(&hparamBlock);
        if (osErr) {
            /* error occured -- map error code and return */
            _dosmaperr(osErr);
            return -1;
        }

        return 0;
}
Esempio n. 2
0
int __srename (
        const char *oldname,
        const char *newname
        )
{
        /* ask OS to move file */
        HParamBlockRec hparamBlock;
        char stOld[256];
        char stNew[256];
        OSErr osErr;

        strcpy(stOld, oldname);
        strcpy(stNew, newname);
        hparamBlock.ioParam.ioNamePtr = _c2pstr(stOld);
        hparamBlock.ioParam.ioVRefNum = 0;
        hparamBlock.ioParam.ioMisc = _c2pstr(stNew);
        hparamBlock.fileParam.ioDirID = 0;
        osErr = PBHRenameSync(&hparamBlock);
        return osErr;
}
Esempio n. 3
0
int __cdecl _rmdir (
    const char *path
)
{
    ParamBlockRec parm;
    HParamBlockRec hparm;

    OSErr osErr;
    char stPath[256];

    if (!*path || strlen(path) > 255)
    {
        errno = ENOENT;
        return -1;
    }

    strcpy(stPath, path);
    _c2pstr(stPath);

    memset(&hparm, '\0', sizeof(HParamBlockRec));
    hparm.fileParam.ioNamePtr = stPath;

    /* hparm.fileParam.ioVRefNum = 0; */
    /* hparm.fileParam.ioFDirIndex = 0; */

    if ((osErr = PBHGetFInfoSync(&hparm)) == fnfErr)
    {
        memset(&parm, '\0', sizeof(ParamBlockRec));
        parm.fileParam.ioNamePtr = stPath;
        /* parm.fileParam.ioVRefNum = 0; */
        osErr = PBDeleteSync(&parm);
    }
    else if (!osErr)
    {
        osErr = fnfErr;  /* Can't rmdir a file */
    }

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

}
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;
}
Esempio n. 5
0
int _CALLTYPE1 _unlink (
	const char *path
	)
{
	ParamBlockRec parm;
	OSErr osErr;
	char stPath[256];

	if (!*path || strlen(path) > 255)
		{
		errno = ENOENT;
		return -1;
		}
	strcpy(stPath, path);
	_c2pstr(stPath);

	memset(&parm, '\0', sizeof(ParamBlockRec));
	parm.fileParam.ioNamePtr = stPath;
	/* parm.fileParam.ioVRefNum = 0; */
	/* parm.fileParam.ioFDirIndex = 0; */

	if (!(osErr = PBGetFInfoSync(&parm)))  /* Make sure it's not a dir */
		{
		memset(&parm, '\0', sizeof(ParamBlockRec));
		parm.ioParam.ioNamePtr = stPath;
		/* parm.ioParam.ioVRefNum = 0; */
		osErr = PBDeleteSync(&parm);
		}

	if (osErr)
		{
		/* error occured -- map error code and return */
		_dosmaperr(osErr);
		return -1;
		}
	return 0;
		
}
int __cdecl _chmod (
        const char *path,
        int mode
        )
{
        HParamBlockRec hparamBlock;
        char szPath[256];
        OSErr osErr;

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

        strcpy(szPath, path);
        hparamBlock.fileParam.ioNamePtr = _c2pstr(szPath);
        hparamBlock.fileParam.ioVRefNum = 0;
        hparamBlock.fileParam.ioDirID = 0;

        if (mode & _S_IWRITE) {
                /* clear read only/locked bit */
                osErr = PBHRstFLockSync(&hparamBlock);
        }
        else {
                /* set read only/locked bit */
                osErr = PBHSetFLockSync(&hparamBlock);
        }

        if (osErr)
        {
            _dosmaperr(osErr);
            return -1;
        }

        return 0;
}
Esempio n. 7
0
int __accesspath (
        const char *dirname,
        const char *filename
        )
{
        CInfoPBRec cinfoPB;
        OSErr osErr;
        char szBuf[256];

        szBuf[0]='\0';
        if (*dirname)
        {
            strcpy(szBuf, dirname);
        }
        strcat(szBuf, filename);
        cinfoPB.hFileInfo.ioNamePtr = _c2pstr(szBuf);
        cinfoPB.hFileInfo.ioFDirIndex = 0;
        cinfoPB.hFileInfo.ioVRefNum = 0;
        cinfoPB.hFileInfo.ioDirID = 0;
        osErr = PBGetCatInfoSync(&cinfoPB);
        if (osErr)
        {
            return osErr;
        }
        else
        {
            /* file or dir ? */
            if (cinfoPB.hFileInfo.ioFlAttrib & 0x10)
            { /*dir*/
                return 1;
            }
            else
            {
                return 0;
            }
        }
}
Esempio n. 8
0
int __cdecl rename (
        const char *oldname,
        const char *newname
        )
{
        /* ask OS to move file */
        HParamBlockRec hparamBlock;
        char szOldName[32];       //old file name
        char szOldDir[256];       //old dir name
        char szNewName[32];       //new file name
        char szNewDir[256];       //new dir name
        char st[256];             //temp array for p-c string convertion
        char st2[256];            //temp array for p-c string conversion
        char szT[9];              //temp file name
        OSErr osErr;
        CMovePBRec cmovePB;
        int fTemp = 0;
        char *pch;
        char *pchOld;

        pchOld = strrchr(oldname, ':');
        if ( (pchOld!= NULL) && (*(pchOld+1) == '\0') &&
             (strchr(oldname, ':') == strrchr(oldname, ':')) )
        {
            /* rename a volume*/
            pch = strrchr(newname, ':');
            if (pch != NULL && *(pch+1) != '\0')
            {
                /* not rename to another volume name*/
                errno = EINVAL;
                return -1;
            }
            else if (pch != NULL && *(pch+1) == '\0')
            {
                osErr = __srename(oldname, newname);
                if (osErr)
                {
                    _dosmaperr(osErr);
                    return -1;
                }
                    return 0;
            }
            else if (pch == NULL)
            {
                strcpy(szNewName, newname);
                strcat(szNewName, ":");
                osErr = __srename(oldname, szNewName);
                if (osErr)
                {
                    _dosmaperr(osErr);
                    return -1;
                }
                return 0;
            }
        }

        /*Separate file name and directory*/
        __getdirandname(szOldDir, szOldName, oldname);
        __getdirandname(szNewDir, szNewName, newname);
        if (strcmp(szNewName, "")==0)
        {
            errno = EINVAL;
            return -1;
        }

        /*if same dir*/
        if (strcmp(szNewDir, szOldDir)==0 )
        {
            osErr = __srename(oldname, newname);
            if (osErr)
            {
                /* error occured -- map error code and return */
                _dosmaperr(osErr);
                return -1;
            }
            return 0;
        }

        /*if new directory didn't supplied, getcwd*/
        if (!*szNewDir)
        {
            _getcwd(szNewDir, 255);
        }


        /*if same name*/
        if (strcmp(szNewName, szOldName)==0 )
        {
            /*just move*/
            strcpy(st, oldname);
            strcpy(st2, szNewDir);
            cmovePB.ioNamePtr = _c2pstr(st);
            cmovePB.ioVRefNum = 0;
            cmovePB.ioNewName =_c2pstr(st2);
            cmovePB.ioNewDirID = 0;
            cmovePB.ioDirID = 0;
            osErr = PBCatMoveSync(&cmovePB);
            if (osErr)
            {
                /* error occured -- map error code and return */
                if (osErr == nsvErr || osErr == bdNamErr)
                {
                    errno = EXDEV;
                    _macerrno = osErr;
                }
                else
                    _dosmaperr(osErr);
                    return -1;
            }
                return 0;
        }

        osErr = __accesspath(szOldDir, szNewName);
        if (osErr != fnfErr)
        {
            /* rename the file to a temp name */
            strcpy(st, szOldDir);
            strcpy(szT, "fnXXXXXX");
            if (_mktemp(szT)!=NULL)
            {
                strcat(st, szT);
                fTemp = 1;
            }
        }
        else
        {
            *st='\0';
            if (*szOldDir)
            {
                strcpy(st, szOldDir);
            }
            strcat(st, szNewName);
        }
        osErr = __srename(oldname, st);
        if (osErr)
        {
            _dosmaperr(osErr);
            return -1;
        }

        strcpy(st2, szNewDir);
        /* move renamed file to new dir */
        cmovePB.ioNamePtr = _c2pstr(st);
        cmovePB.ioVRefNum = 0;
        cmovePB.ioNewName =_c2pstr(st2);
        cmovePB.ioNewDirID = 0;
        cmovePB.ioDirID = 0;
        osErr = PBCatMoveSync(&cmovePB);
        if (osErr) {
            /* error occured -- rename oldname back */
            strcpy(st2, oldname);
            hparamBlock.ioParam.ioNamePtr = st;
            hparamBlock.ioParam.ioVRefNum = 0;
            hparamBlock.ioParam.ioMisc = _c2pstr(st2);
            hparamBlock.fileParam.ioDirID = 0;
            PBHRenameSync(&hparamBlock);
            if (osErr == nsvErr || osErr == bdNamErr)
            {
                errno=EXDEV;
                _macerrno = osErr;
            }
            else
                _dosmaperr(osErr);
                return -1;
        }

        /* rename it to the new name in new dir*/
        if (fTemp)
        {
            strcpy(st, szNewDir);
            strcat(st, szT);
            osErr = __srename(st, newname);
            if (osErr)
            {
                _dosmaperr(osErr);
                remove(st);
                return -1;
            }
        }
        return 0;
}