summaryrefslogtreecommitdiffstats
path: root/tools/test/posixshm
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2013-08-21 17:47:11 +0000
committerkib <kib@FreeBSD.org>2013-08-21 17:47:11 +0000
commit58d5d31b369ffa07e7a858a1734306f5fda8a553 (patch)
tree1752cd8e52b60856f068bd38b7ed61725d735b47 /tools/test/posixshm
parentd11c4f9c32bf7f78b6ca5f9fc02e869111dbe680 (diff)
downloadFreeBSD-src-58d5d31b369ffa07e7a858a1734306f5fda8a553.zip
FreeBSD-src-58d5d31b369ffa07e7a858a1734306f5fda8a553.tar.gz
Add simple test for the read/write/lseek on posix shm filedescriptor.
Tested by: pho Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'tools/test/posixshm')
-rw-r--r--tools/test/posixshm/shm_test.c27
1 files changed, 21 insertions, 6 deletions
diff --git a/tools/test/posixshm/shm_test.c b/tools/test/posixshm/shm_test.c
index 3ab4732..0ec890a 100644
--- a/tools/test/posixshm/shm_test.c
+++ b/tools/test/posixshm/shm_test.c
@@ -21,7 +21,7 @@
* Signal handler which does nothing.
*/
static void
-ignoreit(int sig)
+ignoreit(int sig __unused)
{
;
}
@@ -29,13 +29,13 @@ ignoreit(int sig)
int
main(int argc, char **argv)
{
- char buf[1024], *cp;
- int desc, rv;
+ char buf[1024], *cp, c;
+ int error, desc, rv;
long scval;
sigset_t ss;
struct sigaction sa;
void *region;
- size_t psize;
+ size_t i, psize;
#ifndef _POSIX_SHARED_MEMORY_OBJECTS
printf("_POSIX_SHARED_MEMORY_OBJECTS is undefined\n");
@@ -118,14 +118,29 @@ main(int argc, char **argv)
sigemptyset(&ss);
sigsuspend(&ss);
- for (cp = region; cp < (char *)region + psize; cp++)
+ for (cp = region; cp < (char *)region + psize; cp++) {
if (*cp != '\151')
_exit(1);
+ }
+ if (lseek(desc, 0, SEEK_SET) == -1)
+ _exit(1);
+ for (i = 0; i < psize; i++) {
+ error = read(desc, &c, 1);
+ if (c != '\151')
+ _exit(1);
+ }
_exit(0);
} else {
int status;
- memset(region, '\151', psize);
+ memset(region, '\151', psize - 2);
+ error = pwrite(desc, region, 2, psize - 2);
+ if (error != 2) {
+ if (error >= 0)
+ errx(1, "short write %d", error);
+ else
+ err(1, "shmfd write");
+ }
kill(rv, SIGUSR1);
waitpid(rv, &status, 0);
OpenPOWER on IntegriCloud