Hi tech@, mg(1)'s backup-to-home-directory writes backup files to `~/.mg.d' according to the manpage. In order to expand the tilde, it uses a custom function (expandtilde, fileio.c:700) which uses the pw entry for the user name returned by getlogin(2). This can lead to an undesired result if mg is run under another user via su.
For reading the startup file `~/.mg', it just tries to get HOME from environment and falls back to a default location defined at compile time if it can't get HOME. I think that it should do the same to setup the backup directory, with no fall back. Inlined is a patch to do that. While there, remove trailing spaces in fileio.c. A fall back could be added if needed. In that case I suggest using `/tmp' instead of a path defined at compile time. If it isn't viable to merge the patch, I think the current behaviour should be reflected in the manpage. I can also write a patch for that. OK? Cheers. Index: fileio.c =================================================================== RCS file: /cvs/src/usr.bin/mg/fileio.c,v retrieving revision 1.103 diff -u -p -u -p -r1.103 fileio.c --- fileio.c 28 Jul 2016 21:40:25 -0000 1.103 +++ fileio.c 13 May 2017 04:15:15 -0000 @@ -641,14 +641,15 @@ bkuplocation(const char *fn) int backuptohomedir(int f, int n) { - const char *c = _PATH_MG_DIR; - char *p; + char *home; if (bkupdir == NULL) { - p = adjustname(c, TRUE); - bkupdir = strndup(p, NFILEN); - if (bkupdir == NULL) - return(FALSE); + if ((home = getenv("HOME")) == NULL || *home == '\0') + return (FALSE); + if (asprintf(&bkupdir, _PATH_MG_DIR, home) == -1) { + bkupdir = NULL; + return (FALSE); + } if (mkdir(bkupdir, 0700) == -1 && errno != EEXIST) { free(bkupdir); @@ -736,7 +737,7 @@ expandtilde(const char *fn) plen = strlcpy(path, pw->pw_dir, sizeof(path)); if (plen == 0 || path[plen - 1] != '/') { if (strlcat(path, "/", sizeof(path)) >= sizeof(path)) { - dobeep(); + dobeep(); ewprintf("Path too long"); return (NULL); } Index: pathnames.h =================================================================== RCS file: /cvs/src/usr.bin/mg/pathnames.h,v retrieving revision 1.1 diff -u -p -u -p -r1.1 pathnames.h --- pathnames.h 18 Jun 2012 07:14:55 -0000 1.1 +++ pathnames.h 13 May 2017 04:15:15 -0000 @@ -6,6 +6,6 @@ * standard path names */ -#define _PATH_MG_DIR "~/.mg.d" +#define _PATH_MG_DIR "%s/.mg.d" #define _PATH_MG_STARTUP "%s/.mg" #define _PATH_MG_TERM "%s/.mg-%s"