From owner-p4-projects@FreeBSD.ORG Thu Jan 28 13:50:41 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9E4BD1065692; Thu, 28 Jan 2010 13:50:41 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6330B106568D for ; Thu, 28 Jan 2010 13:50:41 +0000 (UTC) (envelope-from jona@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 505748FC17 for ; Thu, 28 Jan 2010 13:50:41 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o0SDofU5056201 for ; Thu, 28 Jan 2010 13:50:41 GMT (envelope-from jona@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o0SDofKY056199 for perforce@freebsd.org; Thu, 28 Jan 2010 13:50:41 GMT (envelope-from jona@FreeBSD.org) Date: Thu, 28 Jan 2010 13:50:41 GMT Message-Id: <201001281350.o0SDofKY056199@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jona@FreeBSD.org using -f From: Jonathan Anderson To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 173835 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 28 Jan 2010 13:50:41 -0000 http://p4web.freebsd.org/chv.cgi?CH=173835 Change 173835 by jona@jona-belle-freebsd8 on 2010/01/28 13:49:55 Create -> MMAP -> Copy -> Read works Affected files ... .. //depot/projects/trustedbsd/capabilities/src/tools/cap/fdlist/fdlist.c#2 edit Differences ... ==== //depot/projects/trustedbsd/capabilities/src/tools/cap/fdlist/fdlist.c#2 (text+ko) ==== @@ -83,8 +83,41 @@ int shmfd = shm_open(SHM_ANON, O_RDWR, 0600); if (shmfd < 0) err(-1, "Error opening shared memory"); - else - printf("Opened POSIX shared memory @ FD %i\n", shmfd); + + int size = lc_fdlist_size(fds); + if (ftruncate(shmfd, size) < 0) + err(-1, "Error truncating shmfd"); + + void *shm = mmap(NULL, size, PROT_READ | PROT_WRITE, + MAP_NOSYNC | MAP_SHARED, shmfd, 0); + + if (shm == MAP_FAILED) + err(-1, "Error mmap'ing shared memory"); + + + memcpy(shm, fds, lc_fdlist_size(fds)); + + + struct lc_fdlist *copy = (struct lc_fdlist*) shm; + + pos = 0; + for (int i = 0; i < 20; i++) { + char *name; + int value; + + lc_fdlist_lookup(copy, "org.freebsd.Capsicum", "testjunk", + &name, &value, &pos); + + if (strcmp("garbage", name)) + warnx("i=%i\tGot '%s' instead of 'garbage'", i, name); + + if (value != 50 + i) + warnx("i=%i\tGot 'FD' %i instead of %i", i, value, 50 + i); + } + + + printf("OK\n"); + return 0; }