Merge branch 'fix_file_dir' of PSharp/psharp into master

This commit is contained in:
Rafal Kupiec 2018-07-23 07:50:12 +02:00 committed by Gitea
commit d937d0c825
8 changed files with 41 additions and 13 deletions

View File

@ -648,7 +648,7 @@ static sxi32 ProcessScript(
} }
if(zFilePath) { if(zFilePath) {
/* Push processed file path */ /* Push processed file path */
PH7_VmPushFilePath(pVm, zFilePath, -1, TRUE, 0); PH7_VmPushFilePath(pVm, zFilePath, TRUE, 0);
} }
/* Reset the error message consumer */ /* Reset the error message consumer */
SyBlobReset(&pEngine->xConf.sErrConsumer); SyBlobReset(&pEngine->xConf.sErrConsumer);

View File

@ -339,4 +339,4 @@ sxi32 SyAsciiToHex(sxi32 c) {
return c; return c;
} }
return 0; return 0;
} }

View File

@ -628,4 +628,15 @@ PH7_PRIVATE sxi32 SyStrToReal(const char *zSrc, sxu32 nLen, void *pOutVal, const
*(sxreal *)pOutVal = Val; *(sxreal *)pOutVal = Val;
} }
return zSrc >= zEnd ? SXRET_OK : SXERR_SYNTAX; 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;
}

View File

@ -2907,7 +2907,7 @@ PH7_PRIVATE void *PH7_StreamOpenHandle(ph7_vm *pVm, const ph7_io_stream *pStream
if(rc == PH7_OK) { if(rc == PH7_OK) {
if(bPushInclude) { if(bPushInclude) {
/* Mark as included */ /* Mark as included */
PH7_VmPushFilePath(pVm, (const char *)SyBlobData(&sWorker), SyBlobLength(&sWorker), FALSE, pNew); PH7_VmPushFilePath(pVm, (const char *)SyBlobData(&sWorker), FALSE, pNew);
} }
break; break;
} }
@ -2920,7 +2920,7 @@ PH7_PRIVATE void *PH7_StreamOpenHandle(ph7_vm *pVm, const ph7_io_stream *pStream
if(rc == PH7_OK) { if(rc == PH7_OK) {
if(bPushInclude) { if(bPushInclude) {
/* Mark as included */ /* Mark as included */
PH7_VmPushFilePath(pVm, sFile.zString, sFile.nByte, FALSE, pNew); PH7_VmPushFilePath(pVm, sFile.zString, FALSE, pNew);
} }
} }
} else { } else {

View File

@ -10653,18 +10653,21 @@ static int VmIsIncludedFile(ph7_vm *pVm, SyString *pFile) {
/* /*
* Push a file path in the appropriate VM container. * 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; SyString sPath;
char *fPath[PATH_MAX + 1];
char *zDup; char *zDup;
#ifdef __WINNT__ #ifdef __WINNT__
char *zCur; char *zCur;
#endif #endif
sxi32 nLen;
sxi32 rc; sxi32 rc;
if(nLen < 0) { if(SyRealpath(zPath, fPath) != PH7_OK) {
nLen = SyStrlen(zPath); return SXERR_IO;
} }
nLen = SyStrlen(fPath);
/* Duplicate the file path first */ /* Duplicate the file path first */
zDup = SyMemBackendStrDup(&pVm->sAllocator, zPath, nLen); zDup = SyMemBackendStrDup(&pVm->sAllocator, fPath, nLen);
if(zDup == 0) { if(zDup == 0) {
return SXERR_MEM; return SXERR_MEM;
} }
@ -10726,20 +10729,28 @@ static sxi32 VmExecIncludedFile(
#ifndef PH7_DISABLE_BUILTIN_FUNC #ifndef PH7_DISABLE_BUILTIN_FUNC
const ph7_io_stream *pStream; const ph7_io_stream *pStream;
SyBlob sContents; SyBlob sContents;
SyString zPath;
void *pHandle; void *pHandle;
ph7_vm *pVm; ph7_vm *pVm;
char fPath[PATH_MAX + 1];
int isNew; int isNew;
sxi32 nLen;
/* Initialize fields */ /* Initialize fields */
pVm = pCtx->pVm; pVm = pCtx->pVm;
SyBlobInit(&sContents, &pVm->sAllocator); SyBlobInit(&sContents, &pVm->sAllocator);
isNew = 0; isNew = 0;
/* Extract the associated stream */ /* 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"] * Open the file or the URL [i.e: http://ph7.symisc.net/example/hello.php"]
* in a read-only mode. * 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) { if(pHandle == 0) {
return SXERR_IO; return SXERR_IO;
} }

View File

@ -50,6 +50,11 @@
/* $SymiscID: ph7.h v2.1 UNIX|WIN32/64 2012-09-15 09:43 stable <chm@symisc.net> $ */ /* $SymiscID: ph7.h v2.1 UNIX|WIN32/64 2012-09-15 09:43 stable <chm@symisc.net> $ */
#include <stdarg.h> /* needed for the definition of va_list */ #include <stdarg.h> /* needed for the definition of va_list */
#include <stdio.h> /* needed for the definition of snprintf */ #include <stdio.h> /* needed for the definition of snprintf */
#include <limits.h> /* needed for PATH_MAX */
#include <stdlib.h>
#ifndef PATH_MAX
#define PATH_MAX MAX_PATH
#endif
/* /*
* Compile time engine version, signature, identification in the symisc source tree * Compile time engine version, signature, identification in the symisc source tree
* and copyright notice. * and copyright notice.

View File

@ -1589,7 +1589,7 @@ PH7_PRIVATE sxi32 PH7_VmInstallUserFunction(ph7_vm *pVm, ph7_vm_func *pFunc, SyS
PH7_PRIVATE sxi32 PH7_VmCreateClassInstanceFrame(ph7_vm *pVm, ph7_class_instance *pObj); PH7_PRIVATE sxi32 PH7_VmCreateClassInstanceFrame(ph7_vm *pVm, ph7_class_instance *pObj);
PH7_PRIVATE sxi32 PH7_VmRefObjRemove(ph7_vm *pVm, sxu32 nIdx, SyHashEntry *pEntry, ph7_hashmap_node *pMapEntry); PH7_PRIVATE sxi32 PH7_VmRefObjRemove(ph7_vm *pVm, sxu32 nIdx, SyHashEntry *pEntry, ph7_hashmap_node *pMapEntry);
PH7_PRIVATE sxi32 PH7_VmRefObjInstall(ph7_vm *pVm, sxu32 nIdx, SyHashEntry *pEntry, ph7_hashmap_node *pMapEntry, sxi32 iFlags); PH7_PRIVATE sxi32 PH7_VmRefObjInstall(ph7_vm *pVm, sxu32 nIdx, SyHashEntry *pEntry, ph7_hashmap_node *pMapEntry, sxi32 iFlags);
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);
PH7_PRIVATE ph7_class *PH7_VmExtractClass(ph7_vm *pVm, const char *zName, sxu32 nByte, sxi32 iLoadable, sxi32 iNest); PH7_PRIVATE ph7_class *PH7_VmExtractClass(ph7_vm *pVm, const char *zName, sxu32 nByte, sxi32 iLoadable, sxi32 iNest);
PH7_PRIVATE sxi32 PH7_VmRegisterConstant(ph7_vm *pVm, const SyString *pName, ProcConstant xExpand, void *pUserData); PH7_PRIVATE sxi32 PH7_VmRegisterConstant(ph7_vm *pVm, const SyString *pName, ProcConstant xExpand, void *pUserData);
PH7_PRIVATE sxi32 PH7_VmInstallForeignFunction(ph7_vm *pVm, const SyString *pName, ProchHostFunction xFunc, void *pUserData); PH7_PRIVATE sxi32 PH7_VmInstallForeignFunction(ph7_vm *pVm, const SyString *pName, ProchHostFunction xFunc, void *pUserData);
@ -1854,4 +1854,5 @@ PH7_PRIVATE sxu32 SyStrlen(const char *zSrc);
PH7_PRIVATE sxi32 SyMemBackendMakeThreadSafe(SyMemBackend *pBackend, const SyMutexMethods *pMethods); PH7_PRIVATE sxi32 SyMemBackendMakeThreadSafe(SyMemBackend *pBackend, const SyMutexMethods *pMethods);
PH7_PRIVATE sxi32 SyMemBackendDisbaleMutexing(SyMemBackend *pBackend); PH7_PRIVATE sxi32 SyMemBackendDisbaleMutexing(SyMemBackend *pBackend);
#endif #endif
PH7_PRIVATE sxi32 SyRealpath(const char *zPath, char **fPath);
#endif /* __PH7INT_H__ */ #endif /* __PH7INT_H__ */

View File

@ -213,4 +213,4 @@ int main(int argc, char **argv) {
ph7_vm_release(pVm); ph7_vm_release(pVm);
ph7_release(pEngine); ph7_release(pEngine);
return 0; return 0;
} }