/* $OpenBSD: dir.c,v 1.19 2008/06/13 20:07:40 kjell Exp $ */ /* This file is in the public domain. */ /* * Name: MG 2a * Directory management functions * Created: Ron Flax (ron@vsedev.vse.com) * Modified for MG 2a by Mic Kaczmarczik 03-Aug-1987 */ #include "def.h" static char mgcwd[NFILEN]; /* * Initialize anything the directory management routines need. */ void dirinit(void) { mgcwd[0] = '\0'; if (getcwd(mgcwd, sizeof(mgcwd)) == NULL) { ewprintf("Can't get current directory!"); chdir("/"); } if (!(mgcwd[0] == '/' && mgcwd [1] == '\0')) (void)strlcat(mgcwd, "/", sizeof(mgcwd)); } /* * Change current working directory. */ /* ARGSUSED */ int changedir(int f, int n) { char bufc[NFILEN], *bufp; (void)strlcpy(bufc, mgcwd, sizeof(bufc)); if ((bufp = eread("Change default directory: ", bufc, NFILEN, EFDEF | EFNEW | EFCR | EFFILE)) == NULL) return (ABORT); else if (bufp[0] == '\0') return (FALSE); /* Append trailing slash */ if (chdir(bufc) == -1) { ewprintf("Can't change dir to %s", bufc); return (FALSE); } if ((bufp = getcwd(mgcwd, sizeof(mgcwd))) == NULL) panic("Can't get current directory!"); if (mgcwd[strlen(mgcwd) - 1] != '/') (void)strlcat(mgcwd, "/", sizeof(mgcwd)); ewprintf("Current directory is now %s", bufp); return (TRUE); } /* * Show current directory. */ /* ARGSUSED */ int showcwdir(int f, int n) { ewprintf("Current directory: %s", mgcwd); return (TRUE); } int getcwdir(char *buf, size_t len) { if (strlcpy(buf, mgcwd, len) >= len) return (FALSE); return (TRUE); }