[PATCH] Constify atom name strings

Peter Hutterer peter.hutterer at who-t.net
Mon Feb 2 20:02:28 PST 2009


On Mon, Feb 02, 2009 at 07:30:47PM -0800, Alan Coopersmith wrote:
> Changes MakeAtom to take a const char * and NameForAtom to return them,
> since many callers pass pointers to constant strings stored in read-only
> ELF sections.   Updates in-tree callers as necessary to clear const
> mismatch warnings introduced by this change.
> 
> Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
> ---
>  dix/atom.c                   |   15 ++++++++-------
>  dix/dispatch.c               |    2 +-
>  hw/dmx/dmxfont.c             |    4 ++--
>  hw/kdrive/ephyr/ephyrvideo.c |    2 +-
>  hw/xnest/Font.c              |    4 ++--
>  include/dix.h                |    4 ++--
>  include/xkbsrv.h             |    2 +-
>  xfixes/cursor.c              |    4 ++--
>  xkb/xkb.c                    |    2 +-
>  xkb/xkbfmisc.c               |    2 +-
>  xkb/xkbtext.c                |   18 +++++++++++-------
>  xkb/xkmread.c                |    2 +-
>  12 files changed, 33 insertions(+), 28 deletions(-)
> 
> diff --git a/dix/atom.c b/dix/atom.c
> index ab9ee80..f5bf8ad 100644
> --- a/dix/atom.c
> +++ b/dix/atom.c
> @@ -64,7 +64,7 @@ typedef struct _Node {
>      struct _Node   *left,   *right;
>      Atom a;
>      unsigned int fingerPrint;
> -    char   *string;
> +    const char   *string;
>  } NodeRec, *NodePtr;
>  
>  static Atom lastAtom = None;
> @@ -75,7 +75,7 @@ static NodePtr *nodeTable;
>  void FreeAtom(NodePtr patom);
>  
>  Atom
> -MakeAtom(char *string, unsigned len, Bool makeit)
> +MakeAtom(const char *string, unsigned len, Bool makeit)
>  {
>      NodePtr * np;
>      unsigned i;
> @@ -118,13 +118,14 @@ MakeAtom(char *string, unsigned len, Bool makeit)
>  	}
>  	else
>  	{
> -	    nd->string = xalloc(len + 1);
> -	    if (!nd->string) {
> +	    char *newstring = xalloc(len + 1);
> +	    if (!newstring) {
>  		xfree(nd);
>  		return BAD_RESOURCE;
>  	    }
> -	    strncpy(nd->string, string, (int)len);
> -	    nd->string[len] = 0;
> +	    strncpy(newstring, string, (int)len);
> +	    newstring[len] = 0;
> +	    nd->string = newstring;
>  	}
>  	if ((lastAtom + 1) >= tableLength) {
>  	    NodePtr *table;
> @@ -157,7 +158,7 @@ ValidAtom(Atom atom)
>      return (atom != None) && (atom <= lastAtom);
>  }
>  
> -char *
> +const char *
>  NameForAtom(Atom atom)
>  {
>      NodePtr node;
> diff --git a/dix/dispatch.c b/dix/dispatch.c
> index 5cde80b..b06f4aa 100644
> --- a/dix/dispatch.c
> +++ b/dix/dispatch.c
> @@ -901,7 +901,7 @@ ProcInternAtom(ClientPtr client)
>  int
>  ProcGetAtomName(ClientPtr client)
>  {
> -    char *str;
> +    const char *str;
>      xGetAtomNameReply reply;
>      int len;
>      REQUEST(xResourceReq);
> diff --git a/hw/dmx/dmxfont.c b/hw/dmx/dmxfont.c
> index b70f7d2..c33aee7 100644
> --- a/hw/dmx/dmxfont.c
> +++ b/hw/dmx/dmxfont.c
> @@ -253,7 +253,7 @@ Bool dmxBELoadFont(ScreenPtr pScreen, FontPtr pFont)
>  {
>      DMXScreenInfo  *dmxScreen = &dmxScreens[pScreen->myNum];
>      dmxFontPrivPtr  pFontPriv = FontGetPrivate(pFont, dmxFontPrivateIndex);
> -    char           *name;
> +    const char     *name;
>      char          **oldFontPath = NULL;
>      int             nOldPaths;
>      Atom            name_atom, value_atom;
> @@ -415,7 +415,7 @@ Bool dmxBELoadFont(ScreenPtr pScreen, FontPtr pFont)
>      }
>      if (!value_atom) return FALSE;
>  
> -    name = (char *)NameForAtom(value_atom);
> +    name = NameForAtom(value_atom);
>      if (!name) return FALSE;
>  
>      pFontPriv->font[pScreen->myNum] = 
> diff --git a/hw/kdrive/ephyr/ephyrvideo.c b/hw/kdrive/ephyr/ephyrvideo.c
> index c4eb066..5058ebe 100644
> --- a/hw/kdrive/ephyr/ephyrvideo.c
> +++ b/hw/kdrive/ephyr/ephyrvideo.c
> @@ -236,7 +236,7 @@ DoSimpleClip (BoxPtr a_dst_box,
>  static Bool
>  ephyrLocalAtomToHost (int a_local_atom, int *a_host_atom)
>  {
> -    char *atom_name=NULL;
> +    const char *atom_name=NULL;
>      int host_atom=None ;
>  
>      EPHYR_RETURN_VAL_IF_FAIL (a_host_atom, FALSE) ;
> diff --git a/hw/xnest/Font.c b/hw/xnest/Font.c
> index 26faf16..7b388f0 100644
> --- a/hw/xnest/Font.c
> +++ b/hw/xnest/Font.c
> @@ -40,7 +40,7 @@ xnestRealizeFont(ScreenPtr pScreen, FontPtr pFont)
>    int nprops;
>    FontPropPtr props;
>    int i;
> -  char *name;
> +  const char *name;
>  
>    FontSetPrivate(pFont, xnestFontPrivateIndex, NULL);
>  
> @@ -58,7 +58,7 @@ xnestRealizeFont(ScreenPtr pScreen, FontPtr pFont)
>  
>    if (!value_atom) return False;
>  
> -  name = (char *)NameForAtom(value_atom);
> +  name = NameForAtom(value_atom);
>  
>    if (!name) return False;
>  
> diff --git a/include/dix.h b/include/dix.h
> index b210846..658dd29 100644
> --- a/include/dix.h
> +++ b/include/dix.h
> @@ -280,14 +280,14 @@ extern _X_EXPORT Bool ClientIsAsleep(
>  /* atom.c */
>  
>  extern _X_EXPORT Atom MakeAtom(
> -    char * /*string*/,
> +    const char * /*string*/,
>      unsigned /*len*/,
>      Bool /*makeit*/);
>  
>  extern _X_EXPORT Bool ValidAtom(
>      Atom /*atom*/);
>  
> -extern _X_EXPORT char *NameForAtom(
> +extern _X_EXPORT const char *NameForAtom(
>      Atom /*atom*/);
>  
>  extern _X_EXPORT void AtomError(void);
> diff --git a/include/xkbsrv.h b/include/xkbsrv.h
> index 8f6a767..4497220 100644
> --- a/include/xkbsrv.h
> +++ b/include/xkbsrv.h
> @@ -880,7 +880,7 @@ extern _X_EXPORT XkbGeometryPtr XkbLookupNamedGeometry(
>  );
>  
>  extern _X_EXPORT char *	_XkbDupString(
> -	char *			/* str */
> +	const char *		/* str */
>  );
>  
>  extern _X_EXPORT void	XkbConvertCase(
> diff --git a/xfixes/cursor.c b/xfixes/cursor.c
> index 2c584f9..cd3df12 100644
> --- a/xfixes/cursor.c
> +++ b/xfixes/cursor.c
> @@ -457,7 +457,7 @@ ProcXFixesGetCursorName (ClientPtr client)
>      CursorPtr			pCursor;
>      xXFixesGetCursorNameReply	reply;
>      REQUEST(xXFixesGetCursorNameReq);
> -    char *str;
> +    const char *str;
>      int len;
>  
>      REQUEST_SIZE_MATCH(xXFixesGetCursorNameReq);
> @@ -507,7 +507,7 @@ ProcXFixesGetCursorImageAndName (ClientPtr client)
>      CursorPtr			pCursor;
>      CARD32			*image;
>      int				npixels;
> -    char			*name;
> +    const char			*name;
>      int				nbytes, nbytesRound;
>      int				width, height;
>      int				rc, x, y;
> diff --git a/xkb/xkb.c b/xkb/xkb.c
> index d889680..30d58bf 100644
> --- a/xkb/xkb.c
> +++ b/xkb/xkb.c
> @@ -3853,7 +3853,7 @@ register int i,bit;
>  static Bool
>  _XkbCheckTypeName(Atom name,int typeNdx)
>  {
> -char *	str;
> +const char *	str;
>  
>      str= NameForAtom(name);
>      if ((strcmp(str,"ONE_LEVEL")==0)||(strcmp(str,"TWO_LEVEL")==0)||
> diff --git a/xkb/xkbfmisc.c b/xkb/xkbfmisc.c
> index be8accb..aa660df 100644
> --- a/xkb/xkbfmisc.c
> +++ b/xkb/xkbfmisc.c
> @@ -163,7 +163,7 @@ XkbWriteXKBKeymapForNames(	FILE *			file,
>  				unsigned		want,
>  				unsigned		need)
>  {
> -char *		tmp;
> +const char *	tmp;
>  unsigned	complete;
>  XkbNamesPtr	old_names;
>  int		multi_section;
> diff --git a/xkb/xkbtext.c b/xkb/xkbtext.c
> index b9f16a8..836d47e 100644
> --- a/xkb/xkbtext.c
> +++ b/xkb/xkbtext.c
> @@ -70,16 +70,17 @@ char *rtrn;
>  char *
>  XkbAtomText(Atom atm,unsigned format)
>  {
> +const char	*atmstr;
>  char	*rtrn,*tmp;
>  
> -    tmp= XkbAtomGetString(atm);
> -    if (tmp!=NULL) {
> +    atmstr = XkbAtomGetString(atm);
> +    if (atmstr != NULL) {
>  	int	len;
> -	len= strlen(tmp)+1;
> +	len= strlen(atmstr)+1;
>  	if (len>BUFFER_SIZE)
>  	    len= BUFFER_SIZE-2;
>  	rtrn= tbGetBuffer(len);
> -	strncpy(rtrn,tmp,len);
> +	strncpy(rtrn,atmstr,len);
>  	rtrn[len]= '\0';
>      }
>      else {
> @@ -104,7 +105,8 @@ XkbVModIndexText(XkbDescPtr xkb,unsigned ndx,unsigned format)
>  {
>  register int len;
>  register Atom *vmodNames;
> -char *rtrn,*tmp;
> +char *rtrn;
> +const char *tmp;
>  char  numBuf[20];
>  
>      if (xkb && xkb->names)
> @@ -116,8 +118,10 @@ char  numBuf[20];
>  	 tmp= "illegal";
>      else if (vmodNames&&(vmodNames[ndx]!=None))
>  	 tmp= XkbAtomGetString(vmodNames[ndx]);
> -    if (tmp==NULL)
> -	sprintf(tmp=numBuf,"%d",ndx);
> +    if (tmp==NULL) {
> +	sprintf(numBuf,"%d",ndx);
> +	tmp = numBuf;
> +    }
>  
>      len= strlen(tmp)+1;
>      if (format==XkbCFile)
> diff --git a/xkb/xkmread.c b/xkb/xkmread.c
> index a6fdc6f..dc8ab61 100644
> --- a/xkb/xkmread.c
> +++ b/xkb/xkmread.c
> @@ -51,7 +51,7 @@ XkbInternAtom(char *str,Bool only_if_exists)
>  }
>  
>  char *
> -_XkbDupString(char *str)
> +_XkbDupString(const char *str)
>  {
>  char *new;
>     
> -- 
> 1.5.6.5
 
Acked-by: Peter Hutterer <peter.hutterer at who-t.net>



More information about the xorg mailing list