Merge branch 'fix_file_dir' of PSharp/psharp into master
This commit is contained in:
@@ -648,7 +648,7 @@ static sxi32 ProcessScript(
|
||||
}
|
||||
if(zFilePath) {
|
||||
/* Push processed file path */
|
||||
PH7_VmPushFilePath(pVm, zFilePath, -1, TRUE, 0);
|
||||
PH7_VmPushFilePath(pVm, zFilePath, TRUE, 0);
|
||||
}
|
||||
/* Reset the error message consumer */
|
||||
SyBlobReset(&pEngine->xConf.sErrConsumer);
|
||||
|
@@ -339,4 +339,4 @@ sxi32 SyAsciiToHex(sxi32 c) {
|
||||
return c;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@@ -628,4 +628,15 @@ PH7_PRIVATE sxi32 SyStrToReal(const char *zSrc, sxu32 nLen, void *pOutVal, const
|
||||
*(sxreal *)pOutVal = Val;
|
||||
}
|
||||
return zSrc >= zEnd ? SXRET_OK : SXERR_SYNTAX;
|
||||
}
|
||||
}
|
||||
|
||||
PH7_PRIVATE sxi32 SyRealpath(const char *zPath, char **fPath) {
|
||||
#ifdef __UNIXES__
|
||||
if(realpath(zPath, fPath) == NULL) {
|
||||
#else
|
||||
if(GetFullPathName(zPath, PATH_MAX, fPath, NULL) != 0) {
|
||||
#endif
|
||||
return PH7_IO_ERR;
|
||||
}
|
||||
return PH7_OK;
|
||||
}
|
||||
|
@@ -2907,7 +2907,7 @@ PH7_PRIVATE void *PH7_StreamOpenHandle(ph7_vm *pVm, const ph7_io_stream *pStream
|
||||
if(rc == PH7_OK) {
|
||||
if(bPushInclude) {
|
||||
/* Mark as included */
|
||||
PH7_VmPushFilePath(pVm, (const char *)SyBlobData(&sWorker), SyBlobLength(&sWorker), FALSE, pNew);
|
||||
PH7_VmPushFilePath(pVm, (const char *)SyBlobData(&sWorker), FALSE, pNew);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -2920,7 +2920,7 @@ PH7_PRIVATE void *PH7_StreamOpenHandle(ph7_vm *pVm, const ph7_io_stream *pStream
|
||||
if(rc == PH7_OK) {
|
||||
if(bPushInclude) {
|
||||
/* Mark as included */
|
||||
PH7_VmPushFilePath(pVm, sFile.zString, sFile.nByte, FALSE, pNew);
|
||||
PH7_VmPushFilePath(pVm, sFile.zString, FALSE, pNew);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
23
engine/vm.c
23
engine/vm.c
@@ -10653,18 +10653,21 @@ static int VmIsIncludedFile(ph7_vm *pVm, SyString *pFile) {
|
||||
/*
|
||||
* Push a file path in the appropriate VM container.
|
||||
*/
|
||||
PH7_PRIVATE sxi32 PH7_VmPushFilePath(ph7_vm *pVm, const char *zPath, int nLen, sxu8 bMain, sxi32 *pNew) {
|
||||
PH7_PRIVATE sxi32 PH7_VmPushFilePath(ph7_vm *pVm, const char *zPath, sxu8 bMain, sxi32 *pNew) {
|
||||
SyString sPath;
|
||||
char *fPath[PATH_MAX + 1];
|
||||
char *zDup;
|
||||
#ifdef __WINNT__
|
||||
char *zCur;
|
||||
#endif
|
||||
sxi32 nLen;
|
||||
sxi32 rc;
|
||||
if(nLen < 0) {
|
||||
nLen = SyStrlen(zPath);
|
||||
if(SyRealpath(zPath, fPath) != PH7_OK) {
|
||||
return SXERR_IO;
|
||||
}
|
||||
nLen = SyStrlen(fPath);
|
||||
/* Duplicate the file path first */
|
||||
zDup = SyMemBackendStrDup(&pVm->sAllocator, zPath, nLen);
|
||||
zDup = SyMemBackendStrDup(&pVm->sAllocator, fPath, nLen);
|
||||
if(zDup == 0) {
|
||||
return SXERR_MEM;
|
||||
}
|
||||
@@ -10726,20 +10729,28 @@ static sxi32 VmExecIncludedFile(
|
||||
#ifndef PH7_DISABLE_BUILTIN_FUNC
|
||||
const ph7_io_stream *pStream;
|
||||
SyBlob sContents;
|
||||
SyString zPath;
|
||||
void *pHandle;
|
||||
ph7_vm *pVm;
|
||||
char fPath[PATH_MAX + 1];
|
||||
int isNew;
|
||||
sxi32 nLen;
|
||||
/* Initialize fields */
|
||||
pVm = pCtx->pVm;
|
||||
SyBlobInit(&sContents, &pVm->sAllocator);
|
||||
isNew = 0;
|
||||
/* Extract the associated stream */
|
||||
pStream = PH7_VmGetStreamDevice(pVm, &pPath->zString, pPath->nByte);
|
||||
if(SyRealpath(pPath->zString, fPath) != PH7_OK) {
|
||||
return SXERR_IO;
|
||||
}
|
||||
nLen = SyStrlen(fPath);
|
||||
SyStringInitFromBuf(&zPath, fPath, nLen);
|
||||
pStream = PH7_VmGetStreamDevice(pVm, &zPath.zString, zPath.nByte);
|
||||
/*
|
||||
* Open the file or the URL [i.e: http://ph7.symisc.net/example/hello.php"]
|
||||
* in a read-only mode.
|
||||
*/
|
||||
pHandle = PH7_StreamOpenHandle(pVm, pStream, pPath->zString, PH7_IO_OPEN_RDONLY, TRUE, 0, TRUE, &isNew);
|
||||
pHandle = PH7_StreamOpenHandle(pVm, pStream, zPath.zString, PH7_IO_OPEN_RDONLY, TRUE, 0, TRUE, &isNew);
|
||||
if(pHandle == 0) {
|
||||
return SXERR_IO;
|
||||
}
|
||||
|
Reference in New Issue
Block a user