brintos

brintos / linux-shallow public Read only

0
0
Text · 1.2 KiB · 1a23218 Raw
59 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <malloc.h>3#include <stdlib.h>4#include <string.h>5#include <assert.h>6#include "utils.h"7 8void *TEST_MEMMOVE(const void *s1, const void *s2, size_t n);9 10#define BUF_LEN 6553611#define MAX_OFFSET 51212 13size_t max(size_t a, size_t b)14{15	if (a >= b)16		return a;17	return b;18}19 20static int testcase_run(void)21{22	size_t i, src_off, dst_off, len;23 24	char *usermap = memalign(BUF_LEN, BUF_LEN);25	char *kernelmap = memalign(BUF_LEN, BUF_LEN);26 27	assert(usermap != NULL);28	assert(kernelmap != NULL);29 30	memset(usermap, 0, BUF_LEN);31	memset(kernelmap, 0, BUF_LEN);32 33	for (i = 0; i < BUF_LEN; i++) {34		usermap[i] = i & 0xff;35		kernelmap[i] = i & 0xff;36	}37 38	for (src_off = 0; src_off < MAX_OFFSET; src_off++) {39		for (dst_off = 0; dst_off < MAX_OFFSET; dst_off++) {40			for (len = 1; len < MAX_OFFSET - max(src_off, dst_off); len++) {41 42				memmove(usermap + dst_off, usermap + src_off, len);43				TEST_MEMMOVE(kernelmap + dst_off, kernelmap + src_off, len);44				if (memcmp(usermap, kernelmap, MAX_OFFSET) != 0) {45					printf("memmove failed at %ld %ld %ld\n",46							src_off, dst_off, len);47					abort();48				}49			}50		}51	}52	return 0;53}54 55int main(void)56{57	return test_harness(testcase_run, "memmove");58}59