Sorry, space got mangled in previous email. 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" On 13/05/17 01:25, Lucas Gabriel Vuotto wrote: > 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"