Mercurial > libjeffpc
changeset 440:df90b1b883d8
buffer: allow implementations to refuse seeks
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Sun, 01 Apr 2018 14:19:08 -0400 |
parents | 68c030e48341 |
children | 86cfab08dffd |
files | buffer.c include/jeffpc/buffer.h |
diffstat | 2 files changed, 11 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/buffer.c Sat Mar 31 21:30:27 2018 -0400 +++ b/buffer.c Sun Apr 01 14:19:08 2018 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> + * Copyright (c) 2017-2018 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -167,6 +167,14 @@ if (newoff > SSIZE_MAX) return -EOVERFLOW; + if (buffer->ops->check_seek) { + ssize_t ret; + + ret = buffer->ops->check_seek(buffer, offset, whence, newoff); + if (ret) + return ret; + } + buffer->off = newoff; return newoff;
--- a/include/jeffpc/buffer.h Sat Mar 31 21:30:27 2018 -0400 +++ b/include/jeffpc/buffer.h Sun Apr 01 14:19:08 2018 -0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> + * Copyright (c) 2017-2018 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -36,6 +36,7 @@ /* op checking */ int (*check_append)(struct buffer *, const void *, size_t); int (*check_truncate)(struct buffer *, size_t); + ssize_t (*check_seek)(struct buffer *, off_t, int, size_t); /* data manipulation */ void *(*realloc)(void *, size_t);