* of the GNU Lesser General Public License.
*/
-#include "ucw/lib.h"
-#include "ucw/fastbuf.h"
-#include "ucw/lfs.h"
+#include <ucw/lib.h>
+#include <ucw/fastbuf.h>
+#include <ucw/io.h>
#include <stdio.h>
#include <string.h>
int is_temp_file;
int keep_back_buf; /* Optimize for backwards reading */
ucw_off_t wpos; /* Real file position */
- uns wlen; /* Window size */
+ uint wlen; /* Window size */
};
-#define FB_FILE(f) ((struct fb_file *)(f)->is_fastbuf)
+#define FB_FILE(f) ((struct fb_file *)(f))
#define FB_BUFFER(f) (byte *)(FB_FILE(f) + 1)
static int
{
struct fb_file *F = FB_FILE(f);
byte *read_ptr = (f->buffer = FB_BUFFER(f));
- uns blen = f->bufend - f->buffer, back = F->keep_back_buf ? blen >> 2 : 0, read_len = blen;
+ uint blen = f->bufend - f->buffer, back = F->keep_back_buf ? blen >> 2 : 0, read_len = blen;
/* Forward or no seek */
if (F->wpos <= f->pos)
{
goto seek;
}
/* Short forward seek (prefer read() to skip data )*/
- else if ((uns)diff >= back)
+ else if ((uint)diff >= back)
{
- uns skip = diff - back;
+ uint skip = diff - back;
F->wpos += skip;
while (skip)
{
int l = read(F->fd, f->buffer, MIN(skip, blen));
if (unlikely(l <= 0))
if (l < 0)
- bthrow(f, "fb.read", "Error reading %s: %m", f->name);
+ bthrow(f, "read", "Error reading %s: %m", f->name);
else
{
F->wpos -= skip;
/* Reuse part of the previous window and append new data (also F->wpos == f->pos) */
else
{
- uns keep = back - (uns)diff;
+ uint keep = back - (uint)diff;
if (keep >= F->wlen)
back = diff + (keep = F->wlen);
else
goto long_seek;
}
/* Seek into previous window (do nothing... for example brewind) */
- else if ((uns)diff <= F->wlen)
+ else if ((uint)diff <= F->wlen)
{
f->bstop = f->buffer + F->wlen;
f->bptr = f->bstop - diff;
/* Reuse part of previous window */
if (F->wlen && read_len <= back + diff && read_len > back + diff - F->wlen)
{
- uns keep = read_len + F->wlen - back - diff;
+ uint keep = read_len + F->wlen - back - diff;
memmove(f->buffer + read_len - keep, f->buffer, keep);
}
seek:
/* Do lseek() */
F->wpos = f->pos + (f->buffer - f->bptr);
if (ucw_seek(F->fd, F->wpos, SEEK_SET) < 0)
- bthrow(f, "fb.read", "Error seeking %s: %m", f->name);
+ bthrow(f, "read", "Error seeking %s: %m", f->name);
}
/* Read (part of) buffer */
do
{
int l = read(F->fd, read_ptr, read_len);
if (unlikely(l < 0))
- bthrow(f, "fb.read", "Error reading %s: %m", f->name);
+ bthrow(f, "read", "Error reading %s: %m", f->name);
if (!l)
if (unlikely(read_ptr < f->bptr))
goto eof;
{
/* Do delayed lseek() if needed */
if (FB_FILE(f)->wpos != f->pos && ucw_seek(FB_FILE(f)->fd, f->pos, SEEK_SET) < 0)
- bthrow(f, "fb.write", "Error seeking %s: %m", f->name);
+ bthrow(f, "write", "Error seeking %s: %m", f->name);
int l = f->bptr - f->buffer;
byte *c = f->buffer;
{
int z = write(FB_FILE(f)->fd, c, l);
if (z <= 0)
- bthrow(f, "fb.write", "Error writing %s: %m", f->name);
+ bthrow(f, "write", "Error writing %s: %m", f->name);
l -= z;
c += z;
}
case SEEK_END: ;
ucw_off_t l = ucw_seek(FB_FILE(f)->fd, pos, SEEK_END);
if (l < 0)
- bthrow(f, "fb.seek", "Error seeking %s: %m", f->name);
+ bthrow(f, "seek", "Error seeking %s: %m", f->name);
FB_FILE(f)->wpos = f->pos = l;
FB_FILE(f)->wlen = 0;
return 1;
}
static int
-bfd_config(struct fastbuf *f, uns item, int value)
+bfd_config(struct fastbuf *f, uint item, int value)
{
int orig;
}
struct fastbuf *
-bfdopen_internal(int fd, const char *name, uns buflen)
+bfdopen_internal(int fd, const char *name, uint buflen)
{
ASSERT(buflen);
int namelen = strlen(name) + 1;
f->close = bfd_close;
f->config = bfd_config;
f->can_overwrite_buffer = 2;
- fb_tie(f);
return f;
}
struct fastbuf *f, *t;
f = bopen_tmp(16);
t = bfdopen_shared(1, 13);
- for (uns i = 0; i < 16; i++)
+ for (uint i = 0; i < 16; i++)
bwrite(f, "<hello>", 7);
bprintf(t, "%d\n", (int)btell(f));
brewind(f);