Alien-Libjio
view release on metacpan or search on metacpan
libjio/bindings/preload/libjio_preload.c view on Meta::CPAN
mode = 0;
}
if (called) {
printd("orig (r)\n");
return (*c_open)(pathname, flags, mode);
}
printd("libjio\n");
/* skip special files */
r = stat(pathname, &st);
if (r == 0 && ( S_ISDIR(st.st_mode) \
|| S_ISCHR(st.st_mode) \
|| S_ISFIFO(st.st_mode) ) ) {
printd("orig (s)\n");
return (*c_open)(pathname, flags, mode);
}
/* skip /proc and /sys (not /dev, the problematic files are taken care
* of with the stat test above */
/* FIXME: this breaks with relative paths */
libjio/bindings/preload/libjio_preload.c view on Meta::CPAN
mode = 0;
}
if (called) {
printd("orig (r)\n");
return (*c_open64)(pathname, flags, mode);
}
printd("libjio\n");
/* skip special files */
r = stat(pathname, &st);
if (r == 0 && ( S_ISDIR(st.st_mode) \
|| S_ISCHR(st.st_mode) \
|| S_ISFIFO(st.st_mode) ) ) {
printd("orig (s)\n");
return (*c_open64)(pathname, flags, mode);
}
/* skip /proc and /sys (not /dev, the problematic files are taken care
* of with the stat test above */
/* FIXME: this breaks with relative paths */
libjio/libjio/check.c view on Meta::CPAN
goto exit;
}
} else {
fs.jdir = strdup(jdir);
if (fs.jdir == NULL) {
ret = J_ENOMEM;
goto exit;
}
}
rv = lstat(fs.jdir, &sinfo);
if (rv < 0) {
ret = J_EIO;
if (errno == ENOENT)
ret = J_ENOJOURNAL;
goto exit;
}
if (!S_ISDIR(sinfo.st_mode)) {
ret = J_ENOJOURNAL;
goto exit;
}
libjio/libjio/trans.c view on Meta::CPAN
goto error_exit;
/* nothing else to do for read-only access */
if (jflags & J_RDONLY) {
return fs;
}
if (!get_jdir(name, jdir))
goto error_exit;
rv = mkdir(jdir, 0750);
rv = lstat(jdir, &sinfo);
if (rv < 0 || !S_ISDIR(sinfo.st_mode))
goto error_exit;
fs->jdir = (char *) malloc(strlen(jdir) + 1);
if (fs->jdir == NULL)
goto error_exit;
strcpy(fs->jdir, jdir);
/* open the directory, we will use it to flush transaction files'
* metadata in jtrans_commit() */
libjio/libjio/trans.c view on Meta::CPAN
jfd = open(jlockfile, O_RDWR | O_CREAT, 0600);
if (jfd < 0)
goto error_exit;
fs->jfd = jfd;
/* initialize the lock file by writing the first tid to it, but only
* if its empty, otherwise there is a race if two processes call
* jopen() simultaneously and both initialize the file */
plockf(jfd, F_LOCKW, 0, 0);
lstat(jlockfile, &sinfo);
if (sinfo.st_size != sizeof(unsigned int)) {
t = 0;
rv = spwrite(jfd, &t, sizeof(t), 0);
if (rv != sizeof(t)) {
goto error_exit;
}
}
plockf(jfd, F_UNLOCK, 0, 0);
fs->jmap = (unsigned int *) mmap(NULL, sizeof(unsigned int),
( run in 0.489 second using v1.01-cache-2.11-cpan-49f99fa48dc )