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.

Reply via email to