Files
mckernel/test/mng_mod/issues/923/arm64/CT02m.c
2018-11-22 05:27:56 +00:00

125 lines
2.1 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <errno.h>
int
readline(int fd, char *buf)
{
int r;
int rc = 0;
while ((r = read(fd, buf, 1)) == 1) {
rc++;
if (*buf == '\n')
break;
buf++;
}
if (r == -1) {
perror("read");
exit(1);
}
if (!rc) {
fprintf(stderr, "CT02m read: BAD EOF\n");
exit(1);
}
*buf = '\0';
return rc;
}
int
main(int argc, char **argv)
{
int fd;
char buf[80];
char *m;
int f;
if (syscall(732) == -1) {
fprintf(stderr, "run under Mckernel!\n");
exit(1);
}
if (argv[1] == NULL) {
fprintf(stderr, "No parameter\n");
exit(1);
}
fd = atoi(argv[1]);
m = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
if (m == (void *)-1) {
perror("mmap");
exit(1);
}
// CT02001
sprintf(buf, "%p 1\n", m);
strcpy(m, "1234567");
write(fd, buf, strlen(buf));
readline(fd, buf);
// CT02003
f = open("/dev/zero", O_RDONLY);
read(f, m, 4096);
close(f);
sprintf(buf, "%p 2\n", m);
strcpy(m, "1234567");
write(fd, buf, strlen(buf));
readline(fd, buf);
// CT02005
munmap(m, 4096);
sprintf(buf, "%p 3\n", m);
write(fd, buf, strlen(buf));
readline(fd, buf);
m = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
if (m == (void *)-1) {
perror("mmap");
exit(1);
}
// CT02006
sprintf(buf, "%p\n", m);
strcpy(m, "1234567");
write(fd, buf, strlen(buf));
readline(fd, buf);
if (strcmp(m, "1234567")) {
fprintf(stderr, "CT02007 NG broken data: %s\n", m);
}
else {
fprintf(stderr, "CT02007 OK no data updated\n");
}
fflush(stderr);
// CT02008
f = open("/dev/zero", O_RDONLY);
read(f, m, 4096);
close(f);
sprintf(buf, "%p\n", m);
strcpy(m, "1234567");
write(fd, buf, strlen(buf));
readline(fd, buf);
if (strcmp(m, "ABCDEFG")) {
fprintf(stderr, "CT02009 NG broken data: %s\n", m);
}
else {
fprintf(stderr, "CT02009 OK data updated\n");
}
fflush(stderr);
// CT02010
munmap(m, 4096); sprintf(buf, "%p 6\n", m); write(fd, buf, strlen(buf));
close(fd);
exit(0);
}