On Fri, May 19, 2017 at 02:11:22PM -0300, Lucas Gabriel Vuotto wrote:
> Previous patch shall be ignored, as it was an ugly hack. Below is a patch
> that is simpler and fixes expandtilde instead, so it fixes the problem in
> other situations (writing files to ~, for example). The only thing that I'm
> not sure is whether to use getuid or geteuid. Any suggestion / explanation is
> welcome.
what is emacs doing in this case?
>
> Index: usr.bin/mg/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
> --- usr.bin/mg/fileio.c 28 Jul 2016 21:40:25 -0000 1.103
> +++ usr.bin/mg/fileio.c 18 May 2017 17:53:03 -0000
> @@ -723,15 +723,12 @@ expandtilde(const char *fn)
> return(ret);
> }
> if (ulen == 0) { /* ~/ or ~ */
> - if ((un = getlogin()) != NULL)
> - (void)strlcpy(user, un, sizeof(user));
> - else
> - user[0] = '\0';
> + pw = getpwuid(getuid());
> } else { /* ~user/ or ~user */
> memcpy(user, &fn[1], ulen);
> user[ulen] = '\0';
> + pw = getpwnam(user);
> }
> - pw = getpwnam(user);
> if (pw != NULL) {
> plen = strlcpy(path, pw->pw_dir, sizeof(path));
> if (plen == 0 || path[plen - 1] != '/') {
>
>
> On 13/05/17 01:32, Lucas Gabriel Vuotto wrote:
> >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"
> >
>
--
I'm not entirely sure you are real.