]> Sergey Matveev's repositories - tofuproxy.git/blobdiff - cmd/zstd/unzstd.c
Use Capsicum if available
[tofuproxy.git] / cmd / zstd / unzstd.c
index ada11ea7494afcab042230ea8b5b0a147c6588c3..caddee5f6e4aebbef6822a77b42fe66f16bc6ac5 100644 (file)
@@ -27,15 +27,29 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <zstd.h>
 
+#ifdef __FreeBSD__
+#include "capsicum.c.in"
+#include <capsicum_helpers.h>
+#include <err.h>
+#include <sysexits.h>
+#endif // __FreeBSD__
+
 int
 main(int argc, char **argv)
 {
+    FILE *fdOff = fdopen(3, "wb");
+#ifdef __FreeBSD__
+    if ((fdOff != NULL) && (caph_limit_stream(3, CAPH_WRITE)) != 0) {
+        errx(EX_OSERR, "can not caph_limit_stream(3)");
+    };
+    capsicum_start();
+#endif // __FreeBSD__
+
     ZSTD_DCtx *ctx = ZSTD_createDCtx();
     if (ctx == NULL) {
         fputs("can not initialize ZSTD_DCtx\n", stderr);
         return 1;
     };
-    FILE *fdOff            = fdopen(3, "wb");
     int rc                 = EXIT_FAILURE;
     uint8_t *bufIn         = NULL;
     uint8_t *bufOut        = NULL;