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);