[PATCH:twm] Add some const.

Thomas Klausner wiz at netbsd.org
Wed Sep 23 11:54:40 PDT 2015


Ah, good catch. I've attached a cleanup patch for that.
 Thomas


On Wed, Sep 23, 2015 at 11:38:02AM -0700, Jasper St. Pierre wrote:
> I was imagining that it might be used like:
> 
>     char *foo = ExpandFilename(name);
>     ...
>     if (foo != name)
>         free(foo);
> 
> ... which would still work, but the != is now dead code. If callers
> were unconditionally freeing before, I heavily suspect something more
> serious here.
> 
> On Wed, Sep 23, 2015 at 9:30 AM, Thomas Klausner <wiz at netbsd.org> wrote:
> > Well, yes, but for context, here is the full function after the change:
> >
> > char *
> > ExpandFilename(const char *name)
> > {
> >     char *newname;
> >
> >     if (name[0] != '~') return strdup(name);
> >
> >     newname = malloc (HomeLen + strlen(name) + 2);
> >     if (!newname) {
> >         fprintf (stderr,
> >                  "%s:  unable to allocate %ld bytes to expand filename %s/%s\n",
> >                  ProgramName, HomeLen + (unsigned long)strlen(name) + 2,
> >                  Home, &name[1]);
> >     } else {
> >         (void) sprintf (newname, "%s/%s", Home, &name[1]);
> >     }
> >
> >     return newname;
> > }
> >
> > So in other words, now the function is consistent in returning a
> > malloc()ed string when it succeeds.
> >  Thomas
> >
> > On Wed, Sep 23, 2015 at 08:59:22AM -0700, Jasper St. Pierre wrote:
> >> Should also mention that it also adds a strdup -- I feel that the code
> >> calling this might conditionally free. Would be nice to double-check
> >> callers.
> >>
> >> On Wed, Sep 23, 2015 at 1:58 AM, Thomas Klausner <wiz at netbsd.org> wrote:
> >> > From: Christos Zoulas <christos at NetBSD.org>
> >> >
> >> > Signed-off-by: Thomas Klausner <wiz at NetBSD.org>
> >> > ---
> >> >  src/util.c | 4 ++--
> >> >  src/util.h | 2 +-
> >> >  2 files changed, 3 insertions(+), 3 deletions(-)
> >> >
> >> > diff --git a/src/util.c b/src/util.c
> >> > index 4b94051..5e8f0db 100644
> >> > --- a/src/util.c
> >> > +++ b/src/util.c
> >> > @@ -256,11 +256,11 @@ Zoom(Window wf, Window wt)
> >> >   *  \param name  the filename to expand
> >> >   */
> >> >  char *
> >> > -ExpandFilename(char *name)
> >> > +ExpandFilename(const char *name)
> >> >  {
> >> >      char *newname;
> >> >
> >> > -    if (name[0] != '~') return name;
> >> > +    if (name[0] != '~') return strdup(name);
> >> >
> >> >      newname = malloc (HomeLen + strlen(name) + 2);
> >> >      if (!newname) {
> >> > diff --git a/src/util.h b/src/util.h
> >> > index 7f4527c..4b2d3a8 100644
> >> > --- a/src/util.h
> >> > +++ b/src/util.h
> >> > @@ -64,7 +64,7 @@ in this Software without prior written authorization from The Open Group.
> >> >  extern void MoveOutline ( Window root, int x, int y, int width, int height,
> >> >                           int bw, int th );
> >> >  extern void Zoom ( Window wf, Window wt );
> >> > -extern char * ExpandFilename ( char *name );
> >> > +extern char * ExpandFilename ( const char *name );
> >> >  extern void GetUnknownIcon ( const char *name );
> >> >  extern Pixmap FindBitmap ( const char *name, unsigned int *widthp,
> >> >                            unsigned int *heightp );
> >> > --
> >> > 2.5.2
> >> >
> >> > _______________________________________________
> >> > xorg-devel at lists.x.org: X.Org development
> >> > Archives: http://lists.x.org/archives/xorg-devel
> >> > Info: http://lists.x.org/mailman/listinfo/xorg-devel
> >>
> >>
> >>
> >> --
> >>   Jasper
> >>
> 
> 
> 
> -- 
>   Jasper
> 
-------------- next part --------------
>From e8cd9fe47d1458d6a5ea17addb5cef7026742c82 Mon Sep 17 00:00:00 2001
From: Thomas Klausner <wiz at NetBSD.org>
Date: Wed, 23 Sep 2015 20:53:24 +0200
Subject: [PATCH:twm 2/2] Adapt callers to ExpandFilename change.

It now always allocates memory, so remove some unnecessary checks.
While here, improve handling of an error case.
---
 src/menus.c | 32 ++++++++++++++++++--------------
 src/util.c  |  4 ++--
 2 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/src/menus.c b/src/menus.c
index e23b5ff..ada9c41 100644
--- a/src/menus.c
+++ b/src/menus.c
@@ -2020,7 +2020,7 @@ ExecuteFunction(int func, const char *action, Window w, TwmWindow *tmp_win,
 				 "%s:  unable to open cut file \"%s\"\n",
 				 ProgramName, tmp);
 		    }
-		    if (ptr != tmp) free (ptr);
+		    free (ptr);
 		}
 	    } else {
 		XFree(ptr);
@@ -2171,21 +2171,25 @@ ExecuteFunction(int func, const char *action, Window w, TwmWindow *tmp_win,
 
     case F_FILE:
 	ptr = ExpandFilename(action);
-	fd = open(ptr, O_RDONLY);
-	if (fd >= 0)
-	{
-	    count = read(fd, buff, MAX_FILE_SIZE - 1);
-	    if (count > 0)
-		XStoreBytes(dpy, buff, count);
+	if (ptr) {
+	    fd = open(ptr, O_RDONLY);
+	    if (fd >= 0)
+	    {
+		count = read(fd, buff, MAX_FILE_SIZE - 1);
+		if (count > 0)
+		    XStoreBytes(dpy, buff, count);
 
-	    close(fd);
-	}
-	else
-	{
-	    fprintf (stderr, "%s:  unable to open file \"%s\"\n",
-		     ProgramName, ptr);
+		close(fd);
+	    }
+	    else
+	    {
+		fprintf (stderr, "%s:  unable to open file \"%s\"\n",
+			 ProgramName, ptr);
+	    }
+	    free(ptr);
+	} else {
+	    fprintf (stderr, "%s: error expanding filename\n", ProgramName);
 	}
-	if (ptr != action) free(ptr);
 	break;
 
     case F_REFRESH:
diff --git a/src/util.c b/src/util.c
index 5e8f0db..8e9dab9 100644
--- a/src/util.c
+++ b/src/util.c
@@ -350,7 +350,7 @@ FindBitmap (const char *name, unsigned *widthp, unsigned *heightp)
     pm = XmuLocateBitmapFile (ScreenOfDisplay(dpy, Scr->screen), bigname, NULL,
 			      0, (int *)widthp, (int *)heightp, &HotX, &HotY);
     if (pm == None && Scr->IconDirectory && bigname[0] != '/') {
-	if (bigname != name) free (bigname);
+	free (bigname);
 	/*
 	 * Attempt to find icon in old IconDirectory (now obsolete)
 	 */
@@ -367,7 +367,7 @@ FindBitmap (const char *name, unsigned *widthp, unsigned *heightp)
 	    pm = None;
 	}
     }
-    if (bigname != name) free (bigname);
+    free (bigname);
     if (pm == None) {
 	fprintf (stderr, "%s:  unable to find bitmap \"%s\"\n",
 		 ProgramName, name);
-- 
2.5.2



More information about the xorg-devel mailing list