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 )