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);
 | 
			
		||||
 
 | 
			
		||||
@@ -629,3 +629,14 @@ PH7_PRIVATE sxi32 SyStrToReal(const char *zSrc, sxu32 nLen, void *pOutVal, const
 | 
			
		||||
	}
 | 
			
		||||
	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;
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -50,6 +50,11 @@
 | 
			
		||||
/* $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 <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
 | 
			
		||||
 * and copyright notice.
 | 
			
		||||
 
 | 
			
		||||
@@ -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_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_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 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);
 | 
			
		||||
@@ -1854,4 +1854,5 @@ PH7_PRIVATE sxu32 SyStrlen(const char *zSrc);
 | 
			
		||||
	PH7_PRIVATE sxi32 SyMemBackendMakeThreadSafe(SyMemBackend *pBackend, const SyMutexMethods *pMethods);
 | 
			
		||||
	PH7_PRIVATE sxi32 SyMemBackendDisbaleMutexing(SyMemBackend *pBackend);
 | 
			
		||||
#endif
 | 
			
		||||
PH7_PRIVATE sxi32 SyRealpath(const char *zPath, char **fPath);
 | 
			
		||||
#endif /* __PH7INT_H__ */
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user