37 lines
1,017 B
C
Executable file
37 lines
1,017 B
C
Executable file
#include "tests/filesys/seq-test.h"
|
|
#include <random.h>
|
|
#include <syscall.h>
|
|
#include "tests/lib.h"
|
|
|
|
void
|
|
seq_test (const char *file_name, void *buf, size_t size, size_t initial_size,
|
|
size_t (*block_size_func) (void),
|
|
void (*check_func) (int fd, long ofs))
|
|
{
|
|
size_t ofs;
|
|
int fd;
|
|
|
|
random_bytes (buf, size);
|
|
CHECK (create (file_name, initial_size), "create \"%s\"", file_name);
|
|
CHECK ((fd = open (file_name)) > 1, "open \"%s\"", file_name);
|
|
|
|
ofs = 0;
|
|
msg ("writing \"%s\"", file_name);
|
|
while (ofs < size)
|
|
{
|
|
size_t block_size = block_size_func ();
|
|
if (block_size > size - ofs)
|
|
block_size = size - ofs;
|
|
|
|
if (write (fd, buf + ofs, block_size) != (int) block_size)
|
|
fail ("write %zu bytes at offset %zu in \"%s\" failed",
|
|
block_size, ofs, file_name);
|
|
|
|
ofs += block_size;
|
|
if (check_func != NULL)
|
|
check_func (fd, ofs);
|
|
}
|
|
msg ("close \"%s\"", file_name);
|
|
close (fd);
|
|
check_file (file_name, buf, size);
|
|
}
|