diff --git a/dmenu.c b/dmenu.c index e0c2f80..72f8207 100644 --- a/dmenu.c +++ b/dmenu.c @@ -1,5 +1,6 @@ /* See LICENSE file for copyright and license details. */ #include +#include #include #include #include @@ -15,6 +16,13 @@ #endif #include +/* portability */ +#ifdef __OpenBSD__ +#include +#else +int pledge(const char *promises, const char *paths[]) { return 0; } +#endif + #include "drw.h" #include "util.h" @@ -491,11 +499,21 @@ readstdin(void) lines = MIN(lines, i); } +void +xpledge(const char *promises, const char *paths[]) +{ + if (pledge(promises, paths) < 0) { + die("dmenu: pledge: %s (%s)\n", strerror(errno), promises); + } +} + static void run(void) { XEvent ev; + xpledge("stdio", NULL); + while (!XNextEvent(dpy, &ev)) { if (XFilterEvent(&ev, win)) continue; @@ -654,6 +672,8 @@ main(int argc, char *argv[]) else usage(); + xpledge("stdio rpath dns unix", NULL); + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) fputs("warning: no locale support\n", stderr); if (!(dpy = XOpenDisplay(NULL))) @@ -668,6 +688,8 @@ main(int argc, char *argv[]) die("no fonts could be loaded.\n"); drw_setscheme(drw, &scheme[SchemeNorm]); + xpledge("stdio rpath", NULL); + if (fast) { grabkeyboard(); readstdin();