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