X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Ffb-param.c;h=e0f9a73f49be87ba8d755dac490e6c824cc6b3d0;hb=f17e4350dcf0c033891e52b30b0c32a4a4fed5e0;hp=bde4b58f352765878cbadfb473fb14fb712e9a14;hpb=031256ad2e123eec58521f8e3eb9496c197641d2;p=libucw.git diff --git a/ucw/fb-param.c b/ucw/fb-param.c index bde4b58f..e0f9a73f 100644 --- a/ucw/fb-param.c +++ b/ucw/fb-param.c @@ -8,10 +8,11 @@ * of the GNU Lesser General Public License. */ -#include "ucw/lib.h" -#include "ucw/conf.h" -#include "ucw/lfs.h" -#include "ucw/fastbuf.h" +#include +#include +#include +#include +#include #include #include @@ -25,10 +26,21 @@ struct fb_params fbpar_def = { 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 +#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; } @@ -72,7 +84,7 @@ bopen_fd_internal(int fd, struct fb_params *params, uns mode, const char *name) struct fastbuf *fb; switch (params->type) { -#ifdef CONFIG_UCW_THREADS +#ifdef CONFIG_UCW_FB_DIRECT case FB_DIRECT: fb = fbdir_open_fd_internal(fd, name, params->asio, params->buffer_size ? : fbpar_def.buffer_size, @@ -90,7 +102,7 @@ bopen_fd_internal(int fd, struct fb_params *params, uns mode, const char *name) 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); @@ -102,18 +114,18 @@ bopen_file_internal(const char *name, int mode, struct fb_params *params, int tr { if (!params) params = &fbpar_def; -#ifdef CONFIG_UCW_THREADS +#ifdef CONFIG_UCW_FB_DIRECT if (params->type == FB_DIRECT && !fbdir_cheat) mode |= O_DIRECT; #endif if (params->type == FB_MMAP && (mode & O_ACCMODE) == O_WRONLY) mode = (mode & ~O_ACCMODE) | O_RDWR; - int fd = sh_open(name, mode, 0666); + int fd = ucw_open(name, mode, 0666); if (fd < 0) 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) @@ -134,9 +146,9 @@ bopen_file_try(const char *name, int mode, struct fb_params *params) } struct fastbuf * -bopen_fd(int fd, struct fb_params *params) +bopen_fd_name(int fd, struct fb_params *params, const char *name) { - return bopen_fd_internal(fd, params ? : &fbpar_def, ~0U, NULL); + return bopen_fd_internal(fd, params ? : &fbpar_def, ~0U, name); } /* Function for use by individual file back-ends */ @@ -151,7 +163,7 @@ bclose_file_helper(struct fastbuf *f, int fd, int is_temp_file) 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); } }