xref: /openbsd-src/usr.bin/mg/dir.c (revision 2b0358df1d88d06ef4139321dd05bd5e05d91eaf)
1 /*	$OpenBSD: dir.c,v 1.19 2008/06/13 20:07:40 kjell Exp $	*/
2 
3 /* This file is in the public domain. */
4 
5 /*
6  * Name:	MG 2a
7  *		Directory management functions
8  * Created:	Ron Flax (ron@vsedev.vse.com)
9  *		Modified for MG 2a by Mic Kaczmarczik 03-Aug-1987
10  */
11 
12 #include "def.h"
13 
14 static char	 mgcwd[NFILEN];
15 
16 /*
17  * Initialize anything the directory management routines need.
18  */
19 void
20 dirinit(void)
21 {
22 	mgcwd[0] = '\0';
23 	if (getcwd(mgcwd, sizeof(mgcwd)) == NULL) {
24 		ewprintf("Can't get current directory!");
25 		chdir("/");
26 	}
27 	if (!(mgcwd[0] == '/' && mgcwd [1] == '\0'))
28 		(void)strlcat(mgcwd, "/", sizeof(mgcwd));
29 }
30 
31 /*
32  * Change current working directory.
33  */
34 /* ARGSUSED */
35 int
36 changedir(int f, int n)
37 {
38 	char	bufc[NFILEN], *bufp;
39 
40 	(void)strlcpy(bufc, mgcwd, sizeof(bufc));
41 	if ((bufp = eread("Change default directory: ", bufc, NFILEN,
42 	    EFDEF | EFNEW | EFCR | EFFILE)) == NULL)
43 		return (ABORT);
44 	else if (bufp[0] == '\0')
45 		return (FALSE);
46 	/* Append trailing slash */
47 	if (chdir(bufc) == -1) {
48 		ewprintf("Can't change dir to %s", bufc);
49 		return (FALSE);
50 	}
51 	if ((bufp = getcwd(mgcwd, sizeof(mgcwd))) == NULL)
52 		panic("Can't get current directory!");
53 	if (mgcwd[strlen(mgcwd) - 1] != '/')
54 		(void)strlcat(mgcwd, "/", sizeof(mgcwd));
55 	ewprintf("Current directory is now %s", bufp);
56 	return (TRUE);
57 }
58 
59 /*
60  * Show current directory.
61  */
62 /* ARGSUSED */
63 int
64 showcwdir(int f, int n)
65 {
66 	ewprintf("Current directory: %s", mgcwd);
67 	return (TRUE);
68 }
69 
70 int
71 getcwdir(char *buf, size_t len)
72 {
73 	if (strlcpy(buf, mgcwd, len) >= len)
74 		return (FALSE);
75 
76 	return (TRUE);
77 }
78