xref: /haiku/src/tests/system/kernel/cache/cache_control.cpp (revision e81a954787e50e56a7f06f72705b7859b6ab06d1)
1 /*
2  * Copyright 2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include <OS.h>
8 #include <syscalls.h>
9 #include <generic_syscall.h>
10 
11 #include <file_cache.h>
12 
13 #include <stdio.h>
14 #include <string.h>
15 
16 
17 extern const char *__progname;
18 
19 
20 void
21 usage()
22 {
23 	fprintf(stderr, "usage: %s [clear | unset | set <module-name>]\n", __progname);
24 	exit(0);
25 }
26 
27 
28 int
29 main(int argc, char **argv)
30 {
31 	uint32 version = 0;
32 	status_t status = _kern_generic_syscall(CACHE_SYSCALLS, B_SYSCALL_INFO, &version, sizeof(version));
33 	if (status != B_OK) {
34 		fprintf(stderr, "%s: The cache syscalls are not available on this system.\n", __progname);
35 		return 1;
36 	}
37 
38 	if (argc < 2)
39 		usage();
40 
41 	if (!strcmp(argv[1], "clear")) {
42 		status = _kern_generic_syscall(CACHE_SYSCALLS, CACHE_CLEAR, NULL, 0);
43 		if (status != B_OK)
44 			fprintf(stderr, "%s: clearing the cache failed: %s\n", __progname, strerror(status));
45 	} else if (!strcmp(argv[1], "unset")) {
46 		status = _kern_generic_syscall(CACHE_SYSCALLS, CACHE_SET_MODULE, NULL, 0);
47 		if (status != B_OK)
48 			fprintf(stderr, "%s: unsetting the cache module failed: %s\n", __progname, strerror(status));
49 	} else if (!strcmp(argv[1], "set") && argc > 2) {
50 		status = _kern_generic_syscall(CACHE_SYSCALLS, CACHE_SET_MODULE, argv[2], strlen(argv[2]));
51 		if (status != B_OK)
52 			fprintf(stderr, "%s: setting the module failed: %s\n", __progname, strerror(status));
53 	} else
54 		usage();
55 
56 	return 0;
57 }
58 
59