X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Ffb-direct.c;h=f87baa36316ba4ebfd78ce4d3371e3e9ce2a3491;hb=f17e4350dcf0c033891e52b30b0c32a4a4fed5e0;hp=1c4409ac3f914899db4abf866f30e365ecfe0553;hpb=031256ad2e123eec58521f8e3eb9496c197641d2;p=libucw.git diff --git a/ucw/fb-direct.c b/ucw/fb-direct.c index 1c4409ac..f87baa36 100644 --- a/ucw/fb-direct.c +++ b/ucw/fb-direct.c @@ -25,27 +25,18 @@ #undef LOCAL_DEBUG -#include "ucw/lib.h" -#include "ucw/fastbuf.h" -#include "ucw/lfs.h" -#include "ucw/asio.h" -#include "ucw/conf.h" -#include "ucw/threads.h" +#include +#include +#include +#include +#include +#include #include #include #include #include -uns fbdir_cheat; - -static struct cf_section fbdir_cf = { - CF_ITEMS { - CF_UNS("Cheat", &fbdir_cheat), - CF_END - } -}; - #define FBDIR_ALIGN 512 enum fbdir_mode { // Current operating mode @@ -66,13 +57,24 @@ struct fb_direct { enum fbdir_mode mode; byte name[0]; }; -#define FB_DIRECT(f) ((struct fb_direct *)(f)->is_fastbuf) +#define FB_DIRECT(f) ((struct fb_direct *)(f)) + +#ifndef TEST +uns fbdir_cheat; + +static struct cf_section fbdir_cf = { + CF_ITEMS { + CF_UNS("Cheat", &fbdir_cheat), + CF_END + } +}; static void CONSTRUCTOR fbdir_global_init(void) { cf_declare_section("FBDirect", &fbdir_cf, 0); } +#endif static void fbdir_read_sync(struct fb_direct *F) @@ -157,7 +159,7 @@ fbdir_refill(struct fastbuf *f) if (!r->status) return 0; if (r->status < 0) - die("Error reading %s: %s", f->name, strerror(r->returned_errno)); + bthrow(f, "read", "Error reading %s: %s", f->name, strerror(r->returned_errno)); f->bptr = f->buffer = r->buffer; f->bstop = f->bufend = f->buffer + r->status; f->pos += r->status; @@ -190,8 +192,8 @@ fbdir_spout(struct fastbuf *f) asio_submit(r); asio_sync(F->io_queue); DBG("FB-DIRECT: Truncating at %llu", (long long)f->pos); - if (sh_ftruncate(F->fd, f->pos) < 0) - die("Error truncating %s: %m", f->name); + if (ucw_ftruncate(F->fd, f->pos) < 0) + bthrow(f, "write", "Error truncating %s: %m", f->name); } else asio_submit(r); @@ -205,7 +207,7 @@ fbdir_spout(struct fastbuf *f) } static int -fbdir_seek(struct fastbuf *f, sh_off_t pos, int whence) +fbdir_seek(struct fastbuf *f, ucw_off_t pos, int whence) { DBG("FB-DIRECT: Seek %llu %d", (long long)pos, whence); @@ -213,7 +215,7 @@ fbdir_seek(struct fastbuf *f, sh_off_t pos, int whence) return 1; fbdir_change_mode(FB_DIRECT(f), M_NULL); // Wait for all async requests to finish - sh_off_t l = sh_seek(FB_DIRECT(f)->fd, pos, whence); + ucw_off_t l = ucw_seek(FB_DIRECT(f)->fd, pos, whence); if (l < 0) return 0; f->pos = l; @@ -311,7 +313,7 @@ fbdir_open_fd_internal(int fd, const char *name, struct asio_queue *q, uns buffe #ifdef TEST -#include "ucw/getopt.h" +#include int main(int argc, char **argv) {