svn commit: r254604 - head/tools/test/posixshm

Konstantin Belousov kib at FreeBSD.org
Wed Aug 21 17:47:12 UTC 2013


Author: kib
Date: Wed Aug 21 17:47:11 2013
New Revision: 254604
URL: http://svnweb.freebsd.org/changeset/base/254604

Log:
  Add simple test for the read/write/lseek on posix shm filedescriptor.
  
  Tested by:	pho
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/tools/test/posixshm/shm_test.c

Modified: head/tools/test/posixshm/shm_test.c
==============================================================================
--- head/tools/test/posixshm/shm_test.c	Wed Aug 21 17:45:00 2013	(r254603)
+++ head/tools/test/posixshm/shm_test.c	Wed Aug 21 17:47:11 2013	(r254604)
@@ -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);
 


More information about the svn-src-head mailing list