1 /* $OpenBSD: realpath.c,v 1.1 2021/10/13 15:04:53 kn Exp $ */ 2 /* 3 * Copyright (c) 2021 Klemens Nanni <kn@openbsd.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include <err.h> 19 #include <limits.h> 20 #include <stdio.h> 21 #include <stdlib.h> 22 #include <unistd.h> 23 24 void __dead 25 usage(void) 26 { 27 fprintf(stderr, "usage: %s [-q] file\n", getprogname()); 28 exit(1); 29 } 30 31 int 32 main(int argc, char *argv[]) 33 { 34 int ch, qflag = 0; 35 char *buf; 36 37 if (pledge("stdio rpath", NULL) == -1) 38 err(1, "pledge"); 39 40 while ((ch = getopt(argc, argv, "q")) != -1) { 41 switch (ch) { 42 case 'q': 43 qflag = 1; 44 break; 45 default: 46 usage(); 47 } 48 } 49 argc -= optind; 50 argv += optind; 51 if (argc != 1) 52 usage(); 53 54 buf = realpath(argv[0], NULL); 55 if (buf == NULL) { 56 if (qflag) 57 return (1); 58 err(1, "%s", argv[0]); 59 } 60 61 printf("%s\n", buf); 62 return (0); 63 } 64