* of the GNU Lesser General Public License.
*/
-#include "ucw/lib.h"
-#include "ucw/conf.h"
-#include "ucw/lfs.h"
-#include "ucw/fastbuf.h"
+#include <ucw/lib.h>
+#include <ucw/conf.h>
+#include <ucw/io.h>
+#include <ucw/fastbuf.h>
+#include <ucw/trans.h>
#include <fcntl.h>
#include <stdio.h>
static char *
fbpar_cf_commit(struct fb_params *p UNUSED)
{
-#ifndef CONFIG_UCW_THREADS
if (p->type == FB_DIRECT)
- return "Direct I/O is supported only with CONFIG_UCW_THREADS";
+ {
+#ifndef CONFIG_UCW_THREADS
+ return "Direct I/O is supported only with CONFIG_UCW_THREADS";
#endif
-#ifndef CONFIG_DIRECT
- if (p->type == FB_DIRECT)
- return "Direct I/O is disabled";
+#ifdef CONFIG_DARWIN
+ return "Direct I/O is not supported on darwin";
#endif
+#ifndef CONFIG_UCW_DIRECT_IO
+ return "Direct I/O disabled by configure switch -CONFIG_UCW_DIRECT_IO";
+#endif
+#ifndef CONFIG_UCW_FB_DIRECT
+ return "Direct I/O disabled by configure switch -CONFIG_UCW_FB_DIRECT";
+#endif
+ }
return NULL;
}
CF_COMMIT(fbpar_cf_commit),
CF_ITEMS {
CF_LOOKUP("Type", (int *)F(type), ((const char * const []){"std", "direct", "mmap", NULL})),
- CF_UNS("BufSize", F(buffer_size)),
- CF_UNS("KeepBackBuf", F(keep_back_buf)),
- CF_UNS("ReadAhead", F(read_ahead)),
- CF_UNS("WriteBack", F(write_back)),
+ CF_UINT("BufSize", F(buffer_size)),
+ CF_UINT("KeepBackBuf", F(keep_back_buf)),
+ CF_UINT("ReadAhead", F(read_ahead)),
+ CF_UINT("WriteBack", F(write_back)),
CF_END
}
# undef F
}
static struct fastbuf *
-bopen_fd_internal(int fd, struct fb_params *params, uns mode, const char *name)
+bopen_fd_internal(int fd, struct fb_params *params, uint mode, const char *name)
{
char buf[32];
if (!name)
struct fastbuf *fb;
switch (params->type)
{
-#ifdef CONFIG_DIRECT
+#ifdef CONFIG_UCW_FB_DIRECT
case FB_DIRECT:
fb = fbdir_open_fd_internal(fd, name, params->asio,
params->buffer_size ? : fbpar_def.buffer_size,
return fb;
case FB_MMAP:
if (!~mode && (int)(mode = fcntl(fd, F_GETFL)) < 0)
- die("Cannot get flags of fd %d: %m", fd);
+ trans_throw("ucw.fb.open", NULL, "Cannot get flags of fd %d: %m", fd);
return bfmmopen_internal(fd, name, mode);
default:
ASSERT(0);
{
if (!params)
params = &fbpar_def;
-#ifdef CONFIG_DIRECT
+#ifdef CONFIG_UCW_FB_DIRECT
if (params->type == FB_DIRECT && !fbdir_cheat)
mode |= O_DIRECT;
#endif
if (try)
return NULL;
else
- die("Unable to %s file %s: %m", (mode & O_CREAT) ? "create" : "open", name);
+ trans_throw("ucw.fb.open", NULL, "Unable to %s file %s: %m", (mode & O_CREAT) ? "create" : "open", name);
struct fastbuf *fb = bopen_fd_internal(fd, params, mode, name);
ASSERT(fb);
if (mode & O_APPEND)
msg(L_ERROR, "unlink(%s): %m", f->name);
case 0:
if (close(fd))
- die("close(%s): %m", f->name);
+ msg(L_ERROR, "close(%s): %m", f->name);
}
}
/* Compatibility wrappers */
struct fastbuf *
-bopen_try(const char *name, uns mode, uns buflen)
+bopen_try(const char *name, uint mode, uint buflen)
{
return bopen_file_try(name, mode, &(struct fb_params){ .type = FB_STD, .buffer_size = buflen });
}
struct fastbuf *
-bopen(const char *name, uns mode, uns buflen)
+bopen(const char *name, uint mode, uint buflen)
{
return bopen_file(name, mode, &(struct fb_params){ .type = FB_STD, .buffer_size = buflen });
}
struct fastbuf *
-bfdopen(int fd, uns buflen)
+bfdopen(int fd, uint buflen)
{
return bopen_fd(fd, &(struct fb_params){ .type = FB_STD, .buffer_size = buflen });
}
struct fastbuf *
-bfdopen_shared(int fd, uns buflen)
+bfdopen_shared(int fd, uint buflen)
{
struct fastbuf *f = bfdopen(fd, buflen);
bconfig(f, BCONFIG_IS_TEMP_FILE, 2);