UnQLite
view release on metacpan or search on metacpan
unqlite/unqlite.c view on Meta::CPAN
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;
}
/* Default temp dir */
jx9_result_string(pCtx, "/tmp", (int)sizeof("/tmp")-1);
}
/* unsigned int (*xProcessId)(void) */
static unsigned int UnixVfs_ProcessId(void)
{
return (unsigned int)getpid();
}
/* int (*xUid)(void) */
static int UnixVfs_uid(void)
{
return (int)getuid();
}
/* int (*xGid)(void) */
static int UnixVfs_gid(void)
{
return (int)getgid();
}
/* int (*xUmask)(int) */
static int UnixVfs_Umask(int new_mask)
{
int old_mask;
old_mask = umask(new_mask);
return old_mask;
}
/* void (*xUsername)(jx9_context *) */
static void UnixVfs_Username(jx9_context *pCtx)
{
#ifndef JX9_UNIX_STATIC_BUILD
struct passwd *pwd;
uid_t uid;
uid = getuid();
pwd = getpwuid(uid); /* Try getting UID for username */
if (pwd == 0) {
return;
}
/* Return the username */
jx9_result_string(pCtx, pwd->pw_name, -1);
#else
jx9_result_string(pCtx, "Unknown", -1);
#endif /* JX9_UNIX_STATIC_BUILD */
return;
}
/* int (*xLink)(const char *, const char *, int) */
static int UnixVfs_link(const char *zSrc, const char *zTarget, int is_sym)
{
int rc;
if( is_sym ){
/* Symbolic link */
rc = symlink(zSrc, zTarget);
}else{
/* Hard link */
rc = link(zSrc, zTarget);
}
return rc == 0 ? JX9_OK : -1;
}
/* int (*xChroot)(const char *) */
static int UnixVfs_chroot(const char *zRootDir)
{
int rc;
rc = chroot(zRootDir);
return rc == 0 ? JX9_OK : -1;
}
/* Export the UNIX vfs */
static const jx9_vfs sUnixVfs = {
"Unix_vfs",
JX9_VFS_VERSION,
UnixVfs_chdir, /* int (*xChdir)(const char *) */
UnixVfs_chroot, /* int (*xChroot)(const char *); */
UnixVfs_getcwd, /* int (*xGetcwd)(jx9_context *) */
UnixVfs_mkdir, /* int (*xMkdir)(const char *, int, int) */
UnixVfs_rmdir, /* int (*xRmdir)(const char *) */
UnixVfs_isdir, /* int (*xIsdir)(const char *) */
UnixVfs_Rename, /* int (*xRename)(const char *, const char *) */
UnixVfs_Realpath, /*int (*xRealpath)(const char *, jx9_context *)*/
UnixVfs_Sleep, /* int (*xSleep)(unsigned int) */
UnixVfs_unlink, /* int (*xUnlink)(const char *) */
UnixVfs_FileExists, /* int (*xFileExists)(const char *) */
UnixVfs_Chmod, /*int (*xChmod)(const char *, int)*/
UnixVfs_Chown, /*int (*xChown)(const char *, const char *)*/
UnixVfs_Chgrp, /*int (*xChgrp)(const char *, const char *)*/
0, /* jx9_int64 (*xFreeSpace)(const char *) */
0, /* jx9_int64 (*xTotalSpace)(const char *) */
UnixVfs_FileSize, /* jx9_int64 (*xFileSize)(const char *) */
UnixVfs_FileAtime, /* jx9_int64 (*xFileAtime)(const char *) */
UnixVfs_FileMtime, /* jx9_int64 (*xFileMtime)(const char *) */
UnixVfs_FileCtime, /* jx9_int64 (*xFileCtime)(const char *) */
UnixVfs_Stat, /* int (*xStat)(const char *, jx9_value *, jx9_value *) */
UnixVfs_lStat, /* int (*xlStat)(const char *, jx9_value *, jx9_value *) */
UnixVfs_isfile, /* int (*xIsfile)(const char *) */
UnixVfs_islink, /* int (*xIslink)(const char *) */
UnixVfs_isreadable, /* int (*xReadable)(const char *) */
UnixVfs_iswritable, /* int (*xWritable)(const char *) */
( run in 2.767 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )