Compare commits

...

4 Commits

Author SHA1 Message Date
DTB
4c81516742
strcmp(1): further error-proofing 2024-08-10 22:30:08 -06:00
DTB
98c4d94f6d
scrut(1): further error-proofing 2024-08-10 22:24:32 -06:00
DTB
da190f713c
npc(1): tweak OpenBSD functions 2024-08-10 22:18:15 -06:00
DTB
10b7f7706b
dj(1): tweak OpenBSD functions 2024-08-10 22:16:06 -06:00
4 changed files with 33 additions and 29 deletions

View File

@ -170,12 +170,6 @@ usage(char *argv0) {
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
#ifdef __OpenBSD__
if (pledge("cpath rpath stdio unveil wpath", NULL) == -1) {
return oserr(NULL", errno);
}
#endif
int align; /* low 8b used, negative if no alignment is being done */ int align; /* low 8b used, negative if no alignment is being done */
int count; /* -1 if dj(1) runs until no more reads are possible */ int count; /* -1 if dj(1) runs until no more reads are possible */
char *fmt; /* set to fmt_asv (default) or fmt_human (-H) */ char *fmt; /* set to fmt_asv (default) or fmt_human (-H) */
@ -183,6 +177,12 @@ int main(int argc, char *argv[]) {
bool retry; /* false if exits on partial reads or writes */ bool retry; /* false if exits on partial reads or writes */
struct Io io[2 /* { in, out } */]; struct Io io[2 /* { in, out } */];
#ifdef __OpenBSD__
if (pledge("cpath rpath stdio unveil wpath", NULL) == -1) {
return oserr(NULL, errno);
}
#endif
/* Set defaults. */ /* Set defaults. */
align = -1; align = -1;
count = -1; count = -1;
@ -217,13 +217,9 @@ int main(int argc, char *argv[]) {
break; break;
} else { } else {
int fd; int fd;
#ifdef __OpenBSD__ #ifdef __OpenBSD__
char *perms = "wc"; if (unveil(optarg, i == 0 ? "r" : "wc") == -1) {
/* modify perms in-place to read-only */
if (i == 0) { perms = "r"; }
if (unveil(optarg, perms) == -1) {
return oserr(NULL, errno); return oserr(NULL, errno);
} }
#endif #endif
@ -267,6 +263,7 @@ int main(int argc, char *argv[]) {
} }
} }
} }
#ifdef __OpenBSD__ #ifdef __OpenBSD__
if (unveil(NULL, NULL) == -1) { return oserr(NULL, errno); } if (unveil(NULL, NULL) == -1) { return oserr(NULL, errno); }
#endif #endif

View File

@ -39,22 +39,20 @@ usage(char *argv0) {
} }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
#ifdef __OpenBSD__
program_name = argv[0] == NULL ? program_name : argv[0];
if (pledge("stdio", NULL) == -1) {
perror(program_name);
return EX_OSERR;
}
#endif
int c; int c;
char showend = 0; /* print a dollar sign before each newline */ char showend = 0; /* print a dollar sign before each newline */
char showtab = 0; /* prints tab characters in caret notation */ char showtab = 0; /* prints tab characters in caret notation */
if (argc > 0) { #ifdef __OpenBSD__
#ifndef __OpenBSD__ if (pledge("stdio", NULL) == -1) {
program_name = argv[0]; perror(argv[0] == NULL ? program_name : argv[0]);
return EX_OSERR;
}
#endif #endif
if (argc > 0) {
program_name = argv[0];
while ((c = getopt(argc, argv, "et")) != -1) { while ((c = getopt(argc, argv, "et")) != -1) {
switch (c){ switch (c){
case 'e': showend = 1; break; case 'e': showend = 1; break;

View File

@ -17,6 +17,7 @@
* along with this program. If not, see https://www.gnu.org/licenses/. * along with this program. If not, see https://www.gnu.org/licenses/.
*/ */
#include <assert.h> /* assert(3) */
#include <stdio.h> /* fprintf(3), stderr, NULL */ #include <stdio.h> /* fprintf(3), stderr, NULL */
#include <stdlib.h> /* EXIT_FAILURE, EXIT_SUCCESS */ #include <stdlib.h> /* EXIT_FAILURE, EXIT_SUCCESS */
#include <string.h> /* memset(3), strchr(3) */ #include <string.h> /* memset(3), strchr(3) */
@ -29,6 +30,7 @@
char *program_name = "scrut"; char *program_name = "scrut";
#define OPTS "bcdefgkprsuwxLS" #define OPTS "bcdefgkprsuwxLS"
/* this is an array so main:sel's size can be known at compile time */
static char opts[] = OPTS; static char opts[] = OPTS;
static int static int
@ -58,7 +60,10 @@ int main(int argc, char *argv[]) {
memset(sel, '\0', sizeof sel); memset(sel, '\0', sizeof sel);
for (int c; (c = getopt(argc, argv, opts)) != -1;) { for (int c; (c = getopt(argc, argv, opts)) != -1;) {
if ((p = strchr(opts, c)) == NULL) { return usage(argv[0]); } if ((p = strchr(opts, c)) == NULL) { return usage(argv[0]); }
else { sel[p - opts] = c; } else {
assert(p - opts < sizeof sel / sizeof *sel); /* bounds check */
sel[p - opts] = c;
}
} }
/* straighten out selections; permute out nulls */ /* straighten out selections; permute out nulls */
@ -73,7 +78,7 @@ int main(int argc, char *argv[]) {
if (optind == argc) { return usage(argv[0]); } if (optind == argc) { return usage(argv[0]); }
for (argv += optind ; *argv != NULL; ++argv) { for (argv += optind ; *argv != NULL; argv = &argv[1]) {
struct stat buf; struct stat buf;
#ifdef __OpenBSD__ #ifdef __OpenBSD__

View File

@ -26,18 +26,22 @@
char *program_name = "strcmp"; char *program_name = "strcmp";
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
program_name = argv[0] == NULL ? program_name : argv[0]; unsigned int i;
int i;
#ifdef __OpenBSD__ #ifdef __OpenBSD__
if (pledge("stdio", NULL) == -1) { if (pledge("stdio", NULL) == -1) {
perror(program_name); perror(argv[0] == NULL ? program_name : argv[0]);
return EX_OSERR; return EX_OSERR;
} }
#endif #endif
if (argc < 3) { if (argc < 3) {
(void)fprintf(stderr, "Usage: %s string string...\n", program_name); (void)fprintf(
stderr,
"Usage: %s string string...\n",
argv[0] == NULL ? program_name : argv[0]
);
return EX_USAGE; return EX_USAGE;
} }