UnQLite

 view release on metacpan or  search on metacpan

unqlite/unqlite.c  view on Meta::CPAN

	rc = access(zPath, R_OK);
	return rc == 0 ? JX9_OK : -1;
}
/* int (*xWritable)(const char *) */
static int UnixVfs_iswritable(const char *zPath)
{
	int rc;
	rc = access(zPath, W_OK);
	return rc == 0 ? JX9_OK : -1;
}
/* int (*xExecutable)(const char *) */
static int UnixVfs_isexecutable(const char *zPath)
{
	int rc;
	rc = access(zPath, X_OK);
	return rc == 0 ? JX9_OK : -1;
}
/* int (*xFiletype)(const char *, jx9_context *) */
static int UnixVfs_Filetype(const char *zPath, jx9_context *pCtx)
{
	struct stat st;
	int rc;
    rc = stat(zPath, &st);
	if( rc != 0 ){
	  /* Expand 'unknown' */
	  jx9_result_string(pCtx, "unknown", sizeof("unknown")-1);
	  return -1;
	}
	if(S_ISREG(st.st_mode) ){
		jx9_result_string(pCtx, "file", sizeof("file")-1);
	}else if(S_ISDIR(st.st_mode)){
		jx9_result_string(pCtx, "dir", sizeof("dir")-1);
	}else if(S_ISLNK(st.st_mode)){
		jx9_result_string(pCtx, "link", sizeof("link")-1);
	}else if(S_ISBLK(st.st_mode)){
		jx9_result_string(pCtx, "block", sizeof("block")-1);
    }else if(S_ISSOCK(st.st_mode)){
		jx9_result_string(pCtx, "socket", sizeof("socket")-1);
	}else if(S_ISFIFO(st.st_mode)){
       jx9_result_string(pCtx, "fifo", sizeof("fifo")-1);
	}else{
		jx9_result_string(pCtx, "unknown", sizeof("unknown")-1);
	}
	return JX9_OK;
}
/* int (*xGetenv)(const char *, jx9_context *) */
static int UnixVfs_Getenv(const char *zVar, jx9_context *pCtx)
{
	char *zEnv;
	zEnv = getenv(zVar);
	if( zEnv == 0 ){
	  return -1;
	}
	jx9_result_string(pCtx, zEnv, -1/*Compute length automatically*/);
	return JX9_OK;
}
/* int (*xSetenv)(const char *, const char *) */
static int UnixVfs_Setenv(const char *zName, const char *zValue)
{
   int rc;
   rc = setenv(zName, zValue, 1);
   return rc == 0 ? JX9_OK : -1;
}
/* int (*xMmap)(const char *, void **, jx9_int64 *) */
static int UnixVfs_Mmap(const char *zPath, void **ppMap, jx9_int64 *pSize)
{
	struct stat st;
	void *pMap;
	int fd;
	int rc;
	/* Open the file in a read-only mode */
	fd = open(zPath, O_RDONLY);
	if( fd < 0 ){
		return -1;
	}
	/* stat the handle */
	fstat(fd, &st);
	/* Obtain a memory view of the whole file */
	pMap = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE|MAP_FILE, fd, 0);
	rc = JX9_OK;
	if( pMap == MAP_FAILED ){
		rc = -1;
	}else{
		/* Point to the memory view */
		*ppMap = pMap;
		*pSize = (jx9_int64)st.st_size;
	}
	close(fd);
	return rc;
}
/* void (*xUnmap)(void *, jx9_int64)  */
static void UnixVfs_Unmap(void *pView, jx9_int64 nSize)
{
	munmap(pView, (size_t)nSize);
}
/* void (*xTempDir)(jx9_context *) */
static void UnixVfs_TempDir(jx9_context *pCtx)
{
	static const char *azDirs[] = {
     "/var/tmp", 
     "/usr/tmp", 
	 "/usr/local/tmp"
  };
  unsigned int i;
  struct stat buf;
  const char *zDir;
  zDir = getenv("TMPDIR");
  if( zDir && zDir[0] != 0 && !access(zDir, 07) ){
	  jx9_result_string(pCtx, zDir, -1);
	  return;
  }
  for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); i++){
	zDir=azDirs[i];
    if( zDir==0 ) continue;
    if( stat(zDir, &buf) ) continue;
    if( !S_ISDIR(buf.st_mode) ) continue;
    if( access(zDir, 07) ) continue;
    /* Got one */
	jx9_result_string(pCtx, zDir, -1);
	return;
  }

unqlite/unqlite.c  view on Meta::CPAN

};
#endif /* JX9_DISABLE_DISK_IO */
/*
 * Return TRUE if we are dealing with the jx9:// stream.
 * FALSE otherwise.
 */
static int is_jx9_stream(const jx9_io_stream *pStream)
{
#ifndef JX9_DISABLE_DISK_IO
	return pStream == &sjx9Stream;
#else
	SXUNUSED(pStream); /* cc warning */
	return 0;
#endif /* JX9_DISABLE_DISK_IO */
}

#endif /* JX9_DISABLE_BUILTIN_FUNC */
/*
 * Export the IO routines defined above and the built-in IO streams
 * [i.e: file://, jx9://].
 * Note:
 *  If the engine is compiled with the JX9_DISABLE_BUILTIN_FUNC directive
 *  defined then this function is a no-op.
 */
JX9_PRIVATE sxi32 jx9RegisterIORoutine(jx9_vm *pVm)
{
#ifndef JX9_DISABLE_BUILTIN_FUNC
	      /* VFS functions */
	static const jx9_builtin_func aVfsFunc[] = {
		{"chdir",   jx9Vfs_chdir   }, 
		{"chroot",  jx9Vfs_chroot  }, 
		{"getcwd",  jx9Vfs_getcwd  }, 
		{"rmdir",   jx9Vfs_rmdir   }, 
		{"is_dir",  jx9Vfs_is_dir  }, 
		{"mkdir",   jx9Vfs_mkdir   }, 
		{"rename",  jx9Vfs_rename  }, 
		{"realpath", jx9Vfs_realpath}, 
		{"sleep",   jx9Vfs_sleep   }, 
		{"usleep",  jx9Vfs_usleep  }, 
		{"unlink",  jx9Vfs_unlink  }, 
		{"delete",  jx9Vfs_unlink  }, 
		{"chmod",   jx9Vfs_chmod   }, 
		{"chown",   jx9Vfs_chown   }, 
		{"chgrp",   jx9Vfs_chgrp   }, 
		{"disk_free_space", jx9Vfs_disk_free_space  }, 
		{"disk_total_space", jx9Vfs_disk_total_space}, 
		{"file_exists", jx9Vfs_file_exists }, 
		{"filesize",    jx9Vfs_file_size   }, 
		{"fileatime",   jx9Vfs_file_atime  }, 
		{"filemtime",   jx9Vfs_file_mtime  }, 
		{"filectime",   jx9Vfs_file_ctime  }, 
		{"is_file",     jx9Vfs_is_file  }, 
		{"is_link",     jx9Vfs_is_link  }, 
		{"is_readable", jx9Vfs_is_readable   }, 
		{"is_writable", jx9Vfs_is_writable   }, 
		{"is_executable", jx9Vfs_is_executable}, 
		{"filetype",    jx9Vfs_filetype }, 
		{"stat",        jx9Vfs_stat     }, 
		{"lstat",       jx9Vfs_lstat    }, 
		{"getenv",      jx9Vfs_getenv   }, 
		{"setenv",      jx9Vfs_putenv   }, 
		{"putenv",      jx9Vfs_putenv   }, 
		{"touch",       jx9Vfs_touch    }, 
		{"link",        jx9Vfs_link     }, 
		{"symlink",     jx9Vfs_symlink  }, 
		{"umask",       jx9Vfs_umask    }, 
		{"sys_get_temp_dir", jx9Vfs_sys_get_temp_dir }, 
		{"get_current_user", jx9Vfs_get_current_user }, 
		{"getpid",      jx9Vfs_getmypid }, 
		{"getuid",      jx9Vfs_getmyuid }, 
		{"getgid",      jx9Vfs_getmygid }, 
		{"uname",       jx9Vfs_uname}, 
		     /* Path processing */ 
		{"dirname",     jx9Builtin_dirname  }, 
		{"basename",    jx9Builtin_basename }, 
		{"pathinfo",    jx9Builtin_pathinfo }, 
		{"strglob",     jx9Builtin_strglob  }, 
		{"fnmatch",     jx9Builtin_fnmatch  }, 
		     /* ZIP processing */
		{"zip_open",    jx9Builtin_zip_open }, 
		{"zip_close",   jx9Builtin_zip_close}, 
		{"zip_read",    jx9Builtin_zip_read }, 
		{"zip_entry_open", jx9Builtin_zip_entry_open }, 
		{"zip_entry_close", jx9Builtin_zip_entry_close}, 
		{"zip_entry_name", jx9Builtin_zip_entry_name }, 
		{"zip_entry_filesize",      jx9Builtin_zip_entry_filesize       }, 
		{"zip_entry_compressedsize", jx9Builtin_zip_entry_compressedsize }, 
		{"zip_entry_read", jx9Builtin_zip_entry_read }, 
		{"zip_entry_reset_cursor", jx9Builtin_zip_entry_reset_cursor}, 
		{"zip_entry_compressionmethod", jx9Builtin_zip_entry_compressionmethod}
	};
	    /* IO stream functions */
	static const jx9_builtin_func aIOFunc[] = {
		{"ftruncate", jx9Builtin_ftruncate }, 
		{"fseek",     jx9Builtin_fseek  }, 
		{"ftell",     jx9Builtin_ftell  }, 
		{"rewind",    jx9Builtin_rewind }, 
		{"fflush",    jx9Builtin_fflush }, 
		{"feof",      jx9Builtin_feof   }, 
		{"fgetc",     jx9Builtin_fgetc  }, 
		{"fgets",     jx9Builtin_fgets  }, 
		{"fread",     jx9Builtin_fread  }, 
		{"fgetcsv",   jx9Builtin_fgetcsv}, 
		{"fgetss",    jx9Builtin_fgetss }, 
		{"readdir",   jx9Builtin_readdir}, 
		{"rewinddir", jx9Builtin_rewinddir }, 
		{"closedir",  jx9Builtin_closedir}, 
		{"opendir",   jx9Builtin_opendir }, 
		{"readfile",  jx9Builtin_readfile}, 
		{"file_get_contents", jx9Builtin_file_get_contents}, 
		{"file_put_contents", jx9Builtin_file_put_contents}, 
		{"file",      jx9Builtin_file   }, 
		{"copy",      jx9Builtin_copy   }, 
		{"fstat",     jx9Builtin_fstat  }, 
		{"fwrite",    jx9Builtin_fwrite }, 
		{"fputs",     jx9Builtin_fwrite }, 
		{"flock",     jx9Builtin_flock  }, 
		{"fclose",    jx9Builtin_fclose }, 
		{"fopen",     jx9Builtin_fopen  }, 
		{"fpassthru", jx9Builtin_fpassthru }, 
		{"fputcsv",   jx9Builtin_fputcsv }, 



( run in 0.941 second using v1.01-cache-2.11-cpan-39bf76dae61 )