diff --git a/rem/aufile/aufile.c b/rem/aufile/aufile.c index cae0627be..00ca4a600 100644 --- a/rem/aufile/aufile.c +++ b/rem/aufile/aufile.c @@ -307,7 +307,7 @@ int aufile_set_position(struct aufile *af, const struct aufile_prm *prm, off_t pos = (off_t)(prm->srate * aufmt_sample_size(prm->fmt) * prm->channels * pos_ms / 1000); - pos = max((off_t)datasize, pos); + pos = min((off_t)datasize, pos); if (fseek(af->f, pos, SEEK_CUR) < 0) return errno; diff --git a/test/aupos.c b/test/aupos.c new file mode 100644 index 000000000..076b4b770 --- /dev/null +++ b/test/aupos.c @@ -0,0 +1,46 @@ +/** + * @file src/aupos.c audio file setposition test + * + * Copyright (C) 2023 Lars Immisch + */ + +#include +#include +#include "test.h" + + +#define DEBUG_MODULE "auposition" +#define DEBUG_LEVEL 5 +#include + + +int test_auposition(void) +{ + struct aufile *af = NULL; + struct aufile_prm prm; + char path[256]; + uint8_t buffer[128]; + + re_snprintf(path, sizeof(path), "%s/beep.wav", test_datapath()); + + int err = aufile_open(&af, &prm, path, AUFILE_READ); + if (err) + TEST_ERR(err); + + err = aufile_set_position(af, &prm, 67); + if (err) + TEST_ERR(err); + + /* That file is 67 ms long, so we shouldn't read anything */ + size_t size = sizeof(buffer); + err = aufile_read(af, buffer, &size); + if (err) + TEST_ERR(err); + + TEST_EQUALS(0, size); + +out: + mem_deref(af); + + return err; +}