xref: /original-bsd/bin/pwd/pwd.c (revision e58c8952)
1 /*
2  * Copyright (c) 1991, 1993, 1994
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.redist.c%
6  */
7 
8 #ifndef lint
9 static char copyright[] =
10 "@(#) Copyright (c) 1991, 1993, 1994\n\
11 	The Regents of the University of California.  All rights reserved.\n";
12 #endif /* not lint */
13 
14 #ifndef lint
15 static char sccsid[] = "@(#)pwd.c	8.3 (Berkeley) 04/01/94";
16 #endif /* not lint */
17 
18 #include <err.h>
19 #include <stdio.h>
20 #include <stdlib.h>
21 #include <unistd.h>
22 
23 void usage __P((void));
24 
25 int
26 main(argc, argv)
27 	int argc;
28 	char *argv[];
29 {
30 	int ch;
31 	char *p;
32 
33 	/*
34 	 * Flags for pwd are a bit strange.  The POSIX 1003.2B/D9 document
35 	 * has an optional -P flag for physical, which is what this program
36 	 * will produce by default.  The logical flag, -L, should fail, as
37 	 * there's no way to display a logical path after forking.  We don't
38 	 * document either flag, only adding -P for future portability.
39 	 */
40 	while ((ch = getopt(argc, argv, "P")) != EOF)
41 		switch (ch) {
42 		case 'P':
43 			break;
44 		case '?':
45 		default:
46 			usage();
47 		}
48 	argc -= optind;
49 	argv += optind;
50 
51 	if (argc != 0)
52 		usage();
53 
54 	if ((p = getcwd(NULL, 0)) == NULL)
55 		err(1, NULL);
56 	(void)printf("%s\n", p);
57 	exit(0);
58 }
59 
60 void
61 usage()
62 {
63 
64 	(void)fprintf(stderr, "usage: pwd\n");
65 	exit(1);
66 }
67