sysutils/parkverbot: update the port to version 1.5

FreeBSD support had been integrated upstream; however, keep the
small hunk of our patch which reports the sector size, could be
useful for debugging potential problems.

Reported by:	portscout
This commit is contained in:
Alexey Dokuchaev 2022-04-11 07:58:04 +00:00
parent 047e25615b
commit d90109c46f
3 changed files with 7 additions and 63 deletions

View file

@ -1,7 +1,7 @@
# Created by: Alexey Dokuchaev <danfe@FreeBSD.org>
PORTNAME= parkverbot
PORTVERSION= 1.4
PORTVERSION= 1.5
CATEGORIES= sysutils
MASTER_SITES= https://inai.de/files/parkverbot/

View file

@ -1,3 +1,3 @@
TIMESTAMP = 1634490016
SHA256 (parkverbot-1.4.tar.xz) = f8a1c2bbcf5821e677e50e59ad8cf281c6750f9410fd87939c7235f045b3afea
SIZE (parkverbot-1.4.tar.xz) = 75460
TIMESTAMP = 1649595137
SHA256 (parkverbot-1.5.tar.xz) = a52e88a60e0a11163ab596dde7d264ba9e80016cf4f276368bfe81f666456e20
SIZE (parkverbot-1.5.tar.xz) = 78488

View file

@ -1,64 +1,8 @@
--- src/parkverbot.c.orig 2021-10-17 16:58:59 UTC
--- src/parkverbot.c.orig 2022-04-10 12:51:33 UTC
+++ src/parkverbot.c
@@ -18,6 +18,7 @@
#include <string.h>
#include <time.h>
#include <unistd.h>
+#include <sys/disk.h>
#include <sys/mount.h>
#include <libHX/init.h>
#include <libHX/list.h>
@@ -36,6 +37,7 @@ struct pv_bdev_entry {
struct HXlist_head anchor;
const char *path;
off_t size, prev_pos;
+ unsigned sector_size;
int fd;
};
@@ -72,6 +74,12 @@ static int pv_mainloop(void)
while (true) {
HXlist_for_each_entry(e, &pv_bdev_list, anchor) {
new_pos = HX_drand(0, e->size);
+ /*
+ * read(2) and write(2) require the offset to be
+ * a multiple of the sector size, otherwise they
+ * will return EINVAL; see FreeBSD PR 91149.
+ */
+ new_pos -= new_pos % e->sector_size;
if (pv_in_window(e->prev_pos, new_pos, e)) {
printf("%s: %llu (in guard window)\n", e->path,
static_cast(unsigned long long, new_pos));
@@ -104,6 +112,7 @@ static bool pv_open_device(const char *path)
struct pv_bdev_entry *e;
char buf[32];
uint64_t size;
+ unsigned sector_size;
int fd;
fd = open(path, O_RDONLY | O_BINARY);
@@ -111,10 +120,14 @@ static bool pv_open_device(const char *path)
fprintf(stderr, "%s: %s\n", path, strerror(errno));
return false;
}
- if (ioctl(fd, BLKGETSIZE64, &size) < 0) {
- fprintf(stderr, "%s: BLKGETSIZE64: %s\n", path, strerror(errno));
+ if (ioctl(fd, DIOCGSECTORSIZE, &sector_size) < 0) {
+ fprintf(stderr, "%s: DIOCGSECTORSIZE: %s\n", path, strerror(errno));
return false;
}
+ if (ioctl(fd, DIOCGMEDIASIZE, &size) < 0) {
+ fprintf(stderr, "%s: DIOCGMEDIASIZE: %s\n", path, strerror(errno));
+ return false;
+ }
e = malloc(sizeof(*e));
if (e == NULL) {
fprintf(stderr, "%s: %s\n", __func__, strerror(errno));
@@ -124,9 +137,10 @@ static bool pv_open_device(const char *path)
HXlist_init(&e->anchor);
e->path = path;
@@ -150,8 +150,8 @@ static bool pv_open_device(const char *path)
e->size = size;
+ e->sector_size = sector_size;
e->sector_size = sector_size;
e->fd = fd;
- printf("Added %s (size %s)\n", e->path,
- HX_unit_size(buf, sizeof(buf), e->size, 1024, 0));