[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

libxkbfile: Changes to 'upstream-unstable'



 .gitignore             |    8 ++++++++
 Makefile.am            |    6 ++----
 README                 |   24 ++++++++++++++++++++++++
 configure.ac           |   14 +++++++++-----
 include/X11/.gitignore |    1 -
 src/.gitignore         |    6 ------
 src/Makefile.am        |    2 +-
 src/XKBfileInt.h       |    9 ++++++---
 src/cout.c             |   26 +++++++++++++++++++++-----
 src/maprules.c         |   11 +++++++++++
 src/xkbatom.c          |    4 ++--
 src/xkbconfig.c        |    2 +-
 src/xkberrs.c          |    7 +++++++
 src/xkmread.c          |   17 ++---------------
 14 files changed, 94 insertions(+), 43 deletions(-)

New commits:
commit fa9520d5a63e181c05dd850223a1916e37e71a13
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Tue Oct 6 17:08:58 2009 -0700

    libxkbfile 1.0.6
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/configure.ac b/configure.ac
index c1dd57d..0506307 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@ dnl Process this file with autoconf to create configure.
 
 AC_PREREQ([2.57])
 
-AC_INIT(libxkbfile, 1.0.5, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libxkbfile)
+AC_INIT(libxkbfile, 1.0.6, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libxkbfile)
 AM_INIT_AUTOMAKE([dist-bzip2])
 AM_MAINTAINER_MODE
 

commit a3d95aedf3a6d1859387fb08b46cd66cd61cec83
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Tue Oct 6 17:05:00 2009 -0700

    Migrate to xorg macros 1.3 & XORG_DEFAULT_OPTIONS
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/configure.ac b/configure.ac
index 3a3822b..c1dd57d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -27,15 +27,16 @@ AC_INIT(libxkbfile, 1.0.5, [https://bugs.freedesktop.org/enter_bug.cgi?product=x
 AM_INIT_AUTOMAKE([dist-bzip2])
 AM_MAINTAINER_MODE
 
-# Require xorg-macros: XORG_CWARNFLAGS, XORG_CHANGELOG
-m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.2)
+# Require xorg-macros: XORG_DEFAULT_OPTIONS
+m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.3 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.3)
 AM_CONFIG_HEADER(config.h)
 
 # Check for progs
 AC_PROG_CC
 AC_PROG_LIBTOOL
-XORG_CWARNFLAGS
+
+XORG_DEFAULT_OPTIONS
 
 AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
                                         [Do not have 'strcasecmp'.]))
@@ -44,13 +45,9 @@ AC_CHECK_FUNC(getc_unlocked, AC_DEFINE([HAVE_UNLOCKED_STDIO], 1,
 
 # Check for dependencies
 PKG_CHECK_MODULES(XKBFILE, x11 kbproto)
-XKBFILE_CFLAGS="$CWARNFLAGS $XKBFILE_CFLAGS"
 AC_SUBST(XKBFILE_CFLAGS)
 AC_SUBST(XKBFILE_LIBS)
 		  
-XORG_RELEASE_VERSION
-XORG_CHANGELOG
-
 AC_OUTPUT([Makefile
 	   src/Makefile
            xkbfile.pc])
diff --git a/src/Makefile.am b/src/Makefile.am
index 6e3ec5f..98e1614 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -20,7 +20,7 @@ INCLUDES = -I$(top_srcdir)/include/ -I$(top_srcdir)/include/X11/extensions/
 
 
 libxkbfile_la_LIBADD = @XKBFILE_LIBS@
-AM_CFLAGS = @XKBFILE_CFLAGS@
+AM_CFLAGS = $(CWARNFLAGS) @XKBFILE_CFLAGS@
 
 libxkbfile_la_LDFLAGS = -version-number 1:0:2 -no-undefined
 

commit d36a99d961c6649ca1b0319c2aadc6763edb07ad
Author: Adam Jackson <ajax@redhat.com>
Date:   Fri May 8 14:15:21 2009 -0400

    Semi-revert 33b839e16fe681ba915658f824ceb1b252084ea4
    
    _XkbDupString() checks for NULL, strdup doesn't.  Still, implement in
    terms of real strdup and skip the calloc.

diff --git a/src/XKBfileInt.h b/src/XKBfileInt.h
index 5573638..a99b7c8 100644
--- a/src/XKBfileInt.h
+++ b/src/XKBfileInt.h
@@ -65,6 +65,12 @@
 
 _XFUNCPROTOBEGIN
 
+static inline
+char *_XkbDupString(const char *s)
+{
+    return s ? strdup(s) : NULL;
+}
+
 #define _XkbStrCaseEqual(s1,s2)	(_XkbStrCaseCmp(s1,s2)==0)
 
 #ifdef NEED_STRCASECMP
diff --git a/src/maprules.c b/src/maprules.c
index b6d773c..104dad3 100644
--- a/src/maprules.c
+++ b/src/maprules.c
@@ -449,8 +449,8 @@ Bool 		append = False;
             }
             if (*words == '\0')
                 return False;
-            group->name = strdup(gname);
-            group->words = strdup(words);
+            group->name = _XkbDupString(gname);
+            group->words = _XkbDupString(words);
             for (i = 1, words = group->words; *words; words++) {
                  if ( *words == ' ') {
                      *words++ = '\0';
@@ -501,17 +501,17 @@ Bool 		append = False;
 	 rule->flags|= XkbRF_Append;
     else
 	 rule->flags|= XkbRF_Normal;
-    rule->model= strdup(tmp.name[MODEL]);
-    rule->layout= strdup(tmp.name[LAYOUT]);
-    rule->variant= strdup(tmp.name[VARIANT]);
-    rule->option= strdup(tmp.name[OPTION]);
-
-    rule->keycodes= strdup(tmp.name[KEYCODES]);
-    rule->symbols= strdup(tmp.name[SYMBOLS]);
-    rule->types= strdup(tmp.name[TYPES]);
-    rule->compat= strdup(tmp.name[COMPAT]);
-    rule->geometry= strdup(tmp.name[GEOMETRY]);
-    rule->keymap= strdup(tmp.name[KEYMAP]);
+    rule->model= _XkbDupString(tmp.name[MODEL]);
+    rule->layout= _XkbDupString(tmp.name[LAYOUT]);
+    rule->variant= _XkbDupString(tmp.name[VARIANT]);
+    rule->option= _XkbDupString(tmp.name[OPTION]);
+
+    rule->keycodes= _XkbDupString(tmp.name[KEYCODES]);
+    rule->symbols= _XkbDupString(tmp.name[SYMBOLS]);
+    rule->types= _XkbDupString(tmp.name[TYPES]);
+    rule->compat= _XkbDupString(tmp.name[COMPAT]);
+    rule->geometry= _XkbDupString(tmp.name[GEOMETRY]);
+    rule->keymap= _XkbDupString(tmp.name[KEYMAP]);
 
     rule->layout_num = rule->variant_num = 0;
     for (i = 0; i < nread; i++) {
@@ -556,7 +556,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
 
    bzero((char *)mdefs,sizeof(XkbRF_MultiDefsRec));
    mdefs->model = defs->model;
-   mdefs->options = strdup(defs->options);
+   mdefs->options = _XkbDupString(defs->options);
    if (mdefs->options) squeeze_spaces(mdefs->options); 
 
    if (defs->layout) {
@@ -565,7 +565,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
        } else {
            char *p;
            int i;
-           mdefs->layout[1] = strdup(defs->layout);
+           mdefs->layout[1] = _XkbDupString(defs->layout);
 	   if (mdefs->layout[1] == NULL)
 	      return False;
            squeeze_spaces(mdefs->layout[1]);
@@ -589,7 +589,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
        } else {
            char *p;
            int i;
-           mdefs->variant[1] = strdup(defs->variant);
+           mdefs->variant[1] = _XkbDupString(defs->variant);
 	   if (mdefs->variant[1] == NULL)
 	      return False;
            squeeze_spaces(mdefs->variant[1]);
@@ -625,7 +625,7 @@ Apply(char *src, char **dst)
 	    *dst= _Concat(*dst, src);
         } else {
             if (*dst == NULL)
-	        *dst= strdup(src);
+	        *dst= _XkbDupString(src);
         }
     }
 }
@@ -1069,8 +1069,8 @@ XkbRF_AddVarDescCopy(XkbRF_DescribeVarsPtr vars,XkbRF_VarDescPtr from)
 XkbRF_VarDescPtr	nd;
 
     if ((nd=XkbRF_AddVarDesc(vars))!=NULL) {
-	nd->name= strdup(from->name);
-	nd->desc= strdup(from->desc);
+	nd->name= _XkbDupString(from->name);
+	nd->desc= _XkbDupString(from->desc);
     }
     return nd;
 }
@@ -1098,7 +1098,7 @@ XkbRF_AddVarToDescribe(XkbRF_RulesPtr rules,char *name)
 	rules->extra= NULL;
 	return NULL;
     }
-    rules->extra_names[rules->num_extra]= strdup(name);
+    rules->extra_names[rules->num_extra]= _XkbDupString(name);
     bzero(&rules->extra[rules->num_extra],sizeof(XkbRF_DescribeVarsRec));
     return &rules->extra[rules->num_extra++];
 }
@@ -1389,30 +1389,30 @@ Status		rtrn;
     out=(char*)data;
     end=out+nitems;
     if (out && (*out) && rf_rtrn)
-	 *rf_rtrn= strdup(out);
+	 *rf_rtrn= _XkbDupString(out);
     out+=strlen(out)+1;
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->model= strdup(out);
+	    vd_rtrn->model= _XkbDupString(out);
 	out+=strlen(out)+1;
     }
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->layout= strdup(out);
+	    vd_rtrn->layout= _XkbDupString(out);
 	out+=strlen(out)+1;
     }
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->variant= strdup(out);
+	    vd_rtrn->variant= _XkbDupString(out);
 	out+=strlen(out)+1;
     }
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->options= strdup(out);
+	    vd_rtrn->options= _XkbDupString(out);
 	out+=strlen(out)+1;
     }
 
diff --git a/src/xkbconfig.c b/src/xkbconfig.c
index dd04e81..37272ce 100644
--- a/src/xkbconfig.c
+++ b/src/xkbconfig.c
@@ -377,7 +377,7 @@ XkbCFAddModByName(	XkbConfigRtrnPtr	rtrn,
 	    last->merge= merge;
 	    last->name= NULL;
 	}
-	last->name= strdup(name);
+	last->name= _XkbDupString(name);
     }
     return last;
 }
@@ -501,7 +501,7 @@ unsigned		what;
 	    }
 	    if (*str!=NULL)
 		_XkbFree(*str);
-	    *str= strdup(val.str);
+	    *str= _XkbDupString(val.str);
 	    break;
 	case _XkbCF_InitialMods:
 	case _XkbCF_IgnoreLockMods:
@@ -1060,7 +1060,7 @@ DefaultFinish(	XkbConfigFieldsPtr	fields,
 	return DefaultCleanUp(rtrn);
     if (what==XkbCF_Check) {
 	if ((rtrn->symbols==NULL)&&(rtrn->phys_symbols!=NULL))
-	    rtrn->symbols= strdup(rtrn->phys_symbols);
+	    rtrn->symbols= _XkbDupString(rtrn->phys_symbols);
     }
     if ((what==XkbCF_Apply)||(what==XkbCF_Check)) {
 	if (xkb && xkb->names && (rtrn->num_unbound_mods>0))
diff --git a/src/xkmread.c b/src/xkmread.c
index b746ce8..bf46bec 100644
--- a/src/xkmread.c
+++ b/src/xkmread.c
@@ -779,9 +779,9 @@ int		nRead=0;
 	    doodad->text.height= doodadWire.text.height;
 	    doodad->text.color_ndx= doodadWire.text.color_ndx;
 	    nRead+= XkmGetCountedString(file,buf,100);
-	    doodad->text.text= strdup(buf);
+	    doodad->text.text= _XkbDupString(buf);
 	    nRead+= XkmGetCountedString(file,buf,100);
-	    doodad->text.font= strdup(buf);
+	    doodad->text.font= _XkbDupString(buf);
 	    break;
 	case XkbIndicatorDoodad:
 	    doodad->indicator.shape_ndx= doodadWire.indicator.shape_ndx;
@@ -793,7 +793,7 @@ int		nRead=0;
 	    doodad->logo.color_ndx= doodadWire.logo.color_ndx;
 	    doodad->logo.shape_ndx= doodadWire.logo.shape_ndx;
 	    nRead+= XkmGetCountedString(file,buf,100);
-	    doodad->logo.logo_name= strdup(buf);
+	    doodad->logo.logo_name= _XkbDupString(buf);
 	    break;
 	default:
 	    /* report error? */
@@ -957,7 +957,7 @@ XkbGeometrySizesRec	sizes;
     geom->width_mm= wireGeom.width_mm;
     geom->height_mm= wireGeom.height_mm;
     nRead+= XkmGetCountedString(file,buf,100);
-    geom->label_font= strdup(buf);
+    geom->label_font= _XkbDupString(buf);
     if (wireGeom.num_properties>0) {
 	char val[1024];
 	for (i=0;i<wireGeom.num_properties;i++) {
@@ -1213,7 +1213,7 @@ char 		name[100];
 		return NULL;
 	    }
 	    if (XkmGetCountedString(file,name,100)>0)
-		return strdup(name);
+		return _XkbDupString(name);
 	    break;
 	default:
 	    _XkbLibError(_XkbErrBadImplementation,

commit 29f27b16dbe511a27a0e953b32913f9d9bf24f2d
Author: Adam Jackson <ajax@redhat.com>
Date:   Thu May 7 16:59:59 2009 -0400

    Use flockfile if available.
    
    Not really a huge improvement, but we might as well.

diff --git a/configure.ac b/configure.ac
index df2c072..3a3822b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,7 +38,9 @@ AC_PROG_LIBTOOL
 XORG_CWARNFLAGS
 
 AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
-                                        [Do not have `strcasecmp'.]))
+                                        [Do not have 'strcasecmp'.]))
+AC_CHECK_FUNC(getc_unlocked, AC_DEFINE([HAVE_UNLOCKED_STDIO], 1,
+				       ['Unlocked stdio']), [])
 
 # Check for dependencies
 PKG_CHECK_MODULES(XKBFILE, x11 kbproto)
diff --git a/src/maprules.c b/src/maprules.c
index cfc4d6d..b6d773c 100644
--- a/src/maprules.c
+++ b/src/maprules.c
@@ -137,6 +137,14 @@ InputLineAddChar(InputLine *line,int ch)
 				(int)((l)->line[(l)->num_line++]= (c)):\
 				InputLineAddChar(l,c))
 
+#ifdef HAVE_UNLOCKED_STDIO
+#undef getc
+#define getc(x) getc_unlocked(x)
+#else
+#define flockfile(x) do {} while (0)
+#define funlockfile(x) do {} while (0)
+#endif
+
 static Bool
 GetInputLine(FILE *file,InputLine *line,Bool checkbang)
 {
@@ -144,6 +152,7 @@ int	ch;
 Bool	endOfFile,spacePending,slashPending,inComment;
 
      endOfFile= False;
+     flockfile(file);
      while ((!endOfFile)&&(line->num_line==0)) {
 	spacePending= slashPending= inComment= False;
 	while (((ch=getc(file))!='\n')&&(ch!=EOF)) {
@@ -208,6 +217,7 @@ Bool	endOfFile,spacePending,slashPending,inComment;
 	     endOfFile= True;
 /*	else line->num_line++;*/
      }
+     funlockfile(file);
      if ((line->num_line==0)&&(endOfFile))
 	return False;
       ADD_CHAR(line,'\0');

commit 33b839e16fe681ba915658f824ceb1b252084ea4
Author: Adam Jackson <ajax@redhat.com>
Date:   Thu May 7 16:31:39 2009 -0400

    s/_XkbDupString/strdup/
    
    Super special bonus lols edition: _XkbDupString would allocate the new
    string with calloc, just to be extra sure.

diff --git a/src/XKBfileInt.h b/src/XKBfileInt.h
index 7eb81a0..5573638 100644
--- a/src/XKBfileInt.h
+++ b/src/XKBfileInt.h
@@ -30,6 +30,7 @@
 /* $XFree86$ */
 
 #include "XKBfile.h"
+#include <string.h>
 
 #ifdef DEBUG
 #define	_XkbLibError(c,l,d) \
@@ -64,10 +65,6 @@
 
 _XFUNCPROTOBEGIN
 
-extern char *	_XkbDupString(
-	char *	/* old_str */
-);
-
 #define _XkbStrCaseEqual(s1,s2)	(_XkbStrCaseCmp(s1,s2)==0)
 
 #ifdef NEED_STRCASECMP
diff --git a/src/maprules.c b/src/maprules.c
index 6060a03..cfc4d6d 100644
--- a/src/maprules.c
+++ b/src/maprules.c
@@ -439,8 +439,8 @@ Bool 		append = False;
             }
             if (*words == '\0')
                 return False;
-            group->name = _XkbDupString(gname);
-            group->words = _XkbDupString(words);
+            group->name = strdup(gname);
+            group->words = strdup(words);
             for (i = 1, words = group->words; *words; words++) {
                  if ( *words == ' ') {
                      *words++ = '\0';
@@ -491,17 +491,17 @@ Bool 		append = False;
 	 rule->flags|= XkbRF_Append;
     else
 	 rule->flags|= XkbRF_Normal;
-    rule->model= _XkbDupString(tmp.name[MODEL]);
-    rule->layout= _XkbDupString(tmp.name[LAYOUT]);
-    rule->variant= _XkbDupString(tmp.name[VARIANT]);
-    rule->option= _XkbDupString(tmp.name[OPTION]);
-
-    rule->keycodes= _XkbDupString(tmp.name[KEYCODES]);
-    rule->symbols= _XkbDupString(tmp.name[SYMBOLS]);
-    rule->types= _XkbDupString(tmp.name[TYPES]);
-    rule->compat= _XkbDupString(tmp.name[COMPAT]);
-    rule->geometry= _XkbDupString(tmp.name[GEOMETRY]);
-    rule->keymap= _XkbDupString(tmp.name[KEYMAP]);
+    rule->model= strdup(tmp.name[MODEL]);
+    rule->layout= strdup(tmp.name[LAYOUT]);
+    rule->variant= strdup(tmp.name[VARIANT]);
+    rule->option= strdup(tmp.name[OPTION]);
+
+    rule->keycodes= strdup(tmp.name[KEYCODES]);
+    rule->symbols= strdup(tmp.name[SYMBOLS]);
+    rule->types= strdup(tmp.name[TYPES]);
+    rule->compat= strdup(tmp.name[COMPAT]);
+    rule->geometry= strdup(tmp.name[GEOMETRY]);
+    rule->keymap= strdup(tmp.name[KEYMAP]);
 
     rule->layout_num = rule->variant_num = 0;
     for (i = 0; i < nread; i++) {
@@ -546,7 +546,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
 
    bzero((char *)mdefs,sizeof(XkbRF_MultiDefsRec));
    mdefs->model = defs->model;
-   mdefs->options = _XkbDupString(defs->options);
+   mdefs->options = strdup(defs->options);
    if (mdefs->options) squeeze_spaces(mdefs->options); 
 
    if (defs->layout) {
@@ -555,7 +555,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
        } else {
            char *p;
            int i;
-           mdefs->layout[1] = _XkbDupString(defs->layout);
+           mdefs->layout[1] = strdup(defs->layout);
 	   if (mdefs->layout[1] == NULL)
 	      return False;
            squeeze_spaces(mdefs->layout[1]);
@@ -579,7 +579,7 @@ MakeMultiDefs(XkbRF_MultiDefsPtr mdefs, XkbRF_VarDefsPtr defs)
        } else {
            char *p;
            int i;
-           mdefs->variant[1] = _XkbDupString(defs->variant);
+           mdefs->variant[1] = strdup(defs->variant);
 	   if (mdefs->variant[1] == NULL)
 	      return False;
            squeeze_spaces(mdefs->variant[1]);
@@ -615,7 +615,7 @@ Apply(char *src, char **dst)
 	    *dst= _Concat(*dst, src);
         } else {
             if (*dst == NULL)
-	        *dst= _XkbDupString(src);
+	        *dst= strdup(src);
         }
     }
 }
@@ -1059,8 +1059,8 @@ XkbRF_AddVarDescCopy(XkbRF_DescribeVarsPtr vars,XkbRF_VarDescPtr from)
 XkbRF_VarDescPtr	nd;
 
     if ((nd=XkbRF_AddVarDesc(vars))!=NULL) {
-	nd->name= _XkbDupString(from->name);
-	nd->desc= _XkbDupString(from->desc);
+	nd->name= strdup(from->name);
+	nd->desc= strdup(from->desc);
     }
     return nd;
 }
@@ -1088,7 +1088,7 @@ XkbRF_AddVarToDescribe(XkbRF_RulesPtr rules,char *name)
 	rules->extra= NULL;
 	return NULL;
     }
-    rules->extra_names[rules->num_extra]= _XkbDupString(name);
+    rules->extra_names[rules->num_extra]= strdup(name);
     bzero(&rules->extra[rules->num_extra],sizeof(XkbRF_DescribeVarsRec));
     return &rules->extra[rules->num_extra++];
 }
@@ -1379,30 +1379,30 @@ Status		rtrn;
     out=(char*)data;
     end=out+nitems;
     if (out && (*out) && rf_rtrn)
-	 *rf_rtrn= _XkbDupString(out);
+	 *rf_rtrn= strdup(out);
     out+=strlen(out)+1;
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->model= _XkbDupString(out);
+	    vd_rtrn->model= strdup(out);
 	out+=strlen(out)+1;
     }
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->layout= _XkbDupString(out);
+	    vd_rtrn->layout= strdup(out);
 	out+=strlen(out)+1;
     }
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->variant= _XkbDupString(out);
+	    vd_rtrn->variant= strdup(out);
 	out+=strlen(out)+1;
     }
 
     if (out<end) {
 	if (*out)
-	    vd_rtrn->options= _XkbDupString(out);
+	    vd_rtrn->options= strdup(out);
 	out+=strlen(out)+1;
     }
 
diff --git a/src/xkbconfig.c b/src/xkbconfig.c
index 37272ce..dd04e81 100644
--- a/src/xkbconfig.c
+++ b/src/xkbconfig.c
@@ -377,7 +377,7 @@ XkbCFAddModByName(	XkbConfigRtrnPtr	rtrn,
 	    last->merge= merge;
 	    last->name= NULL;
 	}
-	last->name= _XkbDupString(name);
+	last->name= strdup(name);
     }
     return last;
 }
@@ -501,7 +501,7 @@ unsigned		what;
 	    }
 	    if (*str!=NULL)
 		_XkbFree(*str);
-	    *str= _XkbDupString(val.str);
+	    *str= strdup(val.str);
 	    break;
 	case _XkbCF_InitialMods:
 	case _XkbCF_IgnoreLockMods:
@@ -1060,7 +1060,7 @@ DefaultFinish(	XkbConfigFieldsPtr	fields,
 	return DefaultCleanUp(rtrn);
     if (what==XkbCF_Check) {
 	if ((rtrn->symbols==NULL)&&(rtrn->phys_symbols!=NULL))
-	    rtrn->symbols= _XkbDupString(rtrn->phys_symbols);
+	    rtrn->symbols= strdup(rtrn->phys_symbols);
     }
     if ((what==XkbCF_Apply)||(what==XkbCF_Check)) {
 	if (xkb && xkb->names && (rtrn->num_unbound_mods>0))
diff --git a/src/xkmread.c b/src/xkmread.c
index 91bfa7b..b746ce8 100644
--- a/src/xkmread.c
+++ b/src/xkmread.c
@@ -76,19 +76,6 @@ XkbInternAtom(Display *dpy,char *str,Bool only_if_exists)
 #define	SEEK_SET 0
 #endif
 
-char *
-_XkbDupString(char *str)
-{
-char *new;
-   
-   if (str==NULL)
-	return NULL;
-   new= (char *)_XkbCalloc(strlen(str)+1,sizeof(char));
-   if (new)
-	strcpy(new,str);
-   return new;
-}
-
 /***====================================================================***/
 
 static XPointer
@@ -792,9 +779,9 @@ int		nRead=0;
 	    doodad->text.height= doodadWire.text.height;
 	    doodad->text.color_ndx= doodadWire.text.color_ndx;
 	    nRead+= XkmGetCountedString(file,buf,100);
-	    doodad->text.text= _XkbDupString(buf);
+	    doodad->text.text= strdup(buf);
 	    nRead+= XkmGetCountedString(file,buf,100);
-	    doodad->text.font= _XkbDupString(buf);
+	    doodad->text.font= strdup(buf);
 	    break;
 	case XkbIndicatorDoodad:
 	    doodad->indicator.shape_ndx= doodadWire.indicator.shape_ndx;
@@ -806,7 +793,7 @@ int		nRead=0;
 	    doodad->logo.color_ndx= doodadWire.logo.color_ndx;
 	    doodad->logo.shape_ndx= doodadWire.logo.shape_ndx;
 	    nRead+= XkmGetCountedString(file,buf,100);
-	    doodad->logo.logo_name= _XkbDupString(buf);
+	    doodad->logo.logo_name= strdup(buf);
 	    break;
 	default:
 	    /* report error? */
@@ -970,7 +957,7 @@ XkbGeometrySizesRec	sizes;
     geom->width_mm= wireGeom.width_mm;
     geom->height_mm= wireGeom.height_mm;
     nRead+= XkmGetCountedString(file,buf,100);
-    geom->label_font= _XkbDupString(buf);
+    geom->label_font= strdup(buf);
     if (wireGeom.num_properties>0) {
 	char val[1024];
 	for (i=0;i<wireGeom.num_properties;i++) {
@@ -1226,7 +1213,7 @@ char 		name[100];
 		return NULL;
 	    }
 	    if (XkmGetCountedString(file,name,100)>0)
-		return _XkbDupString(name);
+		return strdup(name);
 	    break;
 	default:
 	    _XkbLibError(_XkbErrBadImplementation,

commit 4f8dd1aa10a36700bf1f2b05931cd29151b9fee4
Author: Alan Coopersmith <alan.coopersmith@sun.com>
Date:   Mon Feb 2 20:34:39 2009 -0800

    Add README with pointers to mailing list, bugzilla & git repos
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith@sun.com>

diff --git a/README b/README
index e69de29..84be6b3 100644
--- a/README
+++ b/README
@@ -0,0 +1,24 @@
+
+All questions regarding this software should be directed at the
+Xorg mailing list:
+
+        http://lists.freedesktop.org/mailman/listinfo/xorg
+
+Please submit bug reports to the Xorg bugzilla:
+
+        https://bugs.freedesktop.org/enter_bug.cgi?product=xorg
+
+The master development code repository can be found at:
+
+        git://anongit.freedesktop.org/git/xorg/lib/libxkbfile
+
+        http://cgit.freedesktop.org/xorg/lib/libxkbfile
+
+For patch submission instructions, see:
+
+	http://www.x.org/wiki/Development/Documentation/SubmittingPatches
+
+For more information on the git code manager, see:
+
+        http://wiki.x.org/wiki/GitPage
+

commit d17cd6e80f1ec78b69ba11ee55465420e6d7e9a9
Author: Paulo Cesar Pereira de Andrade <pcpa@mandriva.com.br>
Date:   Thu Jan 29 19:52:34 2009 -0200

    Janitor: distcheck, compiler warnings, .gitignore.

diff --git a/.gitignore b/.gitignore
index 9a1dc8e..76d2892 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
+.deps
+.libs
 aclocal.m4
 autom4te.cache
 compile
@@ -20,3 +22,9 @@ mkinstalldirs
 stamp-h1
 xkbfile.pc
 *~
+*.o
+*.la
+*.lo
+libxkbfile-*.tar.*
+ChangeLog
+tags
diff --git a/Makefile.am b/Makefile.am
index 14028f2..0f095e8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -24,14 +24,12 @@ SUBDIRS = src
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = xkbfile.pc
 
-EXTRA_DIST = xkbfile.pc.in autogen.sh
-
-EXTRA_DIST += ChangeLog
+EXTRA_DIST = xkbfile.pc.in ChangeLog
 MAINTAINERCLEANFILES = ChangeLog
 
 .PHONY: ChangeLog
 
 ChangeLog:
-	(GIT_DIR=$(top_srcdir)/.git git-log > .changelog.tmp && mv .changelog.tmp ChangeLog; rm -f .changelog.tmp) || (touch ChangeLog; echo 'git directory not found: installing possibly empty changelog.' >&2)
+	$(CHANGELOG_CMD)
 
 dist-hook: ChangeLog
diff --git a/configure.ac b/configure.ac
index fc8b8c3..df2c072 100644
--- a/configure.ac
+++ b/configure.ac
@@ -27,22 +27,27 @@ AC_INIT(libxkbfile, 1.0.5, [https://bugs.freedesktop.org/enter_bug.cgi?product=x
 AM_INIT_AUTOMAKE([dist-bzip2])
 AM_MAINTAINER_MODE
 
+# Require xorg-macros: XORG_CWARNFLAGS, XORG_CHANGELOG
+m4_ifndef([XORG_MACROS_VERSION], [AC_FATAL([must install xorg-macros 1.2 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.2)
 AM_CONFIG_HEADER(config.h)
 
 # Check for progs
 AC_PROG_CC
 AC_PROG_LIBTOOL
+XORG_CWARNFLAGS
 
 AC_CHECK_FUNC(strcasecmp, [], AC_DEFINE([NEED_STRCASECMP], 1,
                                         [Do not have `strcasecmp'.]))
 
 # Check for dependencies
 PKG_CHECK_MODULES(XKBFILE, x11 kbproto)
-
+XKBFILE_CFLAGS="$CWARNFLAGS $XKBFILE_CFLAGS"
 AC_SUBST(XKBFILE_CFLAGS)
 AC_SUBST(XKBFILE_LIBS)
 		  
 XORG_RELEASE_VERSION
+XORG_CHANGELOG
 
 AC_OUTPUT([Makefile
 	   src/Makefile
diff --git a/include/X11/.gitignore b/include/X11/.gitignore
deleted file mode 100644
index f427429..0000000
--- a/include/X11/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-extensions
diff --git a/src/.gitignore b/src/.gitignore
deleted file mode 100644
index fc50197..0000000
--- a/src/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-libxkbfile.la
-*.lo
-Makefile
-Makefile.in
diff --git a/src/xkbatom.c b/src/xkbatom.c
index 24bdcd7..4fca90c 100644
--- a/src/xkbatom.c
+++ b/src/xkbatom.c
@@ -178,8 +178,8 @@ static char *
 _XkbNameForAtom(Atom atom)
 {
     NodePtr node;
-    if (atom > lastAtom) return 0;
-    if ((node = nodeTable[atom]) == (NodePtr)NULL) return 0;
+    if (atom > lastAtom) return NULL;
+    if ((node = nodeTable[atom]) == (NodePtr)NULL) return NULL;
     return strdup(node->string);
 }
 
diff --git a/src/xkbconfig.c b/src/xkbconfig.c
index 7930979..37272ce 100644
--- a/src/xkbconfig.c
+++ b/src/xkbconfig.c
@@ -340,7 +340,7 @@ XkbCFAddModByName(	XkbConfigRtrnPtr	rtrn,
 						  XkbConfigUnboundModRec);
 	if (rtrn->unbound_mods==NULL) {
 	    rtrn->error= XkbCF_BadAlloc;
-	    return False;
+	    return NULL;
 	}
     }
     if (last==NULL) {
diff --git a/src/xkberrs.c b/src/xkberrs.c
index 1b856bc..a3ad52d 100644
--- a/src/xkberrs.c
+++ b/src/xkberrs.c
@@ -36,6 +36,13 @@
 #include <ctype.h>
 #include <stdlib.h>
 
+#include <X11/Xproto.h>
+#include <X11/Xlib.h>
+#include <X11/Xos.h>
+#include <X11/Xfuncs.h>
+#include <X11/XKBlib.h>
+#include <X11/extensions/XKBfile.h>
+
 char *		_XkbErrMessages[] = {
 	"success",				/* _XkbSuccess		     */
 	"key names not defined",		/* _XkbErrMissingNames	     */
diff --git a/src/xkmread.c b/src/xkmread.c
index f22941f..91bfa7b 100644
--- a/src/xkmread.c
+++ b/src/xkmread.c
@@ -1208,7 +1208,7 @@ xkmSectionInfo	tmpTOC;
 char 		name[100];
 
     if ((!file)||(!toc))
-	return 0;
+	return NULL;
     switch (toc->type) {
 	case XkmVirtualModsIndex:
 	case XkmIndicatorsIndex:
@@ -1223,7 +1223,7 @@ char 		name[100];
 	    if ((tmpTOC.type!=toc->type)||(tmpTOC.format!=toc->format)||
 		(tmpTOC.size!=toc->size)||(tmpTOC.offset!=toc->offset)) {
 		_XkbLibError(_XkbErrIllegalContents,"XkmReadFileSectionName",0);
-		return 0;
+		return NULL;
 	    }
 	    if (XkmGetCountedString(file,name,100)>0)
 		return _XkbDupString(name);

commit dd9514fe714d81b881a1bd6bd88d4287adc5fc7e
Author: Kees Cook <kees.cook@canonical.com>
Date:   Tue Jan 13 15:40:37 2009 -0800

    Fix static buffer overflow in "xkbcomp -C :0"
    
    This patch uses dynamically allocated strings instead of the fixed-length
    buffers to avoid stack overflows.
    
    https://bugs.freedesktop.org/show_bug.cgi?id=19490
    https://bugs.launchpad.net/ubuntu/+source/x11-xkb-utils/+bug/309013
    
    Signed-off-by: Kees Cook <kees.cook@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

diff --git a/src/cout.c b/src/cout.c
index 161bd0f..70aa370 100644
--- a/src/cout.c
+++ b/src/cout.c
@@ -132,13 +132,17 @@ WriteTypeInitFunc(FILE *file,Display *dpy,XkbDescPtr xkb)
 register unsigned 	i,n;
 XkbKeyTypePtr		type;
 Atom *			names;
-char			prefix[32];
+char *			prefix = NULL;
 
     fprintf(file,"\n\nstatic void\n");
     fprintf(file,"initTypeNames(DPYTYPE dpy)\n");
     fprintf(file,"{\n");
     for (i=0,type=xkb->map->types;i<xkb->map->num_types;i++,type++) {
-	strcpy(prefix,XkbAtomText(dpy,type->name,XkbCFile));
+	if (!(prefix = strdup(XkbAtomText(dpy,type->name,XkbCFile)))) {
+		_XkbLibError(_XkbErrBadAlloc,"WriteTypeInitFunc",0);
+		fprintf(file,"#error XkbErrBadAlloc WriteTypeInitFunc\n");
+		break;
+	}
 	if (type->name!=None)
 	    fprintf(file,"    dflt_types[%d].name= GET_ATOM(dpy,\"%s\");\n",i,
 					XkbAtomText(dpy,type->name,XkbCFile));
@@ -155,6 +159,8 @@ char			prefix[32];
 		fprintf(file,"GET_ATOM(dpy,\"%s\");\n",tmp);
 	    }
 	}
+	free(prefix);
+	prefix = NULL;
     }
     fprintf(file,"}\n");
     return;
@@ -166,7 +172,7 @@ WriteCHdrKeyTypes(FILE *file,Display *dpy,XkbDescPtr xkb)
 register unsigned	i,n;
 XkbClientMapPtr		map;
 XkbKeyTypePtr		type;
-char 			prefix[32];
+char * 			prefix = NULL;
 
     if ((!xkb)||(!xkb->map)||(!xkb->map->types)) {
 	_XkbLibError(_XkbErrMissingTypes,"WriteCHdrKeyTypes",0);
@@ -182,7 +188,10 @@ char 			prefix[32];
 				XkbAtomText(dpy,xkb->names->types,XkbCFile));
     }
     for (i=0,type=map->types;i<map->num_types;i++,type++) {
-	strcpy(prefix,XkbAtomText(dpy,type->name,XkbCFile));
+	if (!(prefix = strdup(XkbAtomText(dpy,type->name,XkbCFile)))) {
+		_XkbLibError(_XkbErrBadAlloc,"WriteCHdrKeyTypes",0);
+		return False;
+	}
 
 	if (type->map_count>0) {
 	    XkbKTMapEntryPtr	entry;
@@ -209,10 +218,15 @@ char 			prefix[32];
 							 type->num_levels);
 	}
 	fprintf(file,"\n");
+	free(prefix);
+	prefix = NULL;
     }
     fprintf(file,"static XkbKeyTypeRec dflt_types[]= {\n");
     for (i=0,type=map->types;i<(unsigned)map->num_types;i++,type++) {
-	strcpy(prefix,XkbAtomText(dpy,type->name,XkbCFile));
+	if (!(prefix = strdup(XkbAtomText(dpy,type->name,XkbCFile)))) {
+		_XkbLibError(_XkbErrBadAlloc,"WriteCHdrKeyTypes",0);
+		return False;
+	}
 	if (i!=0)	fprintf(file,",\n");
 	fprintf(file,"    {\n	{ %15s, %15s, %15s },\n",
 			XkbModMaskText(type->mods.mask,XkbCFile),
@@ -229,6 +243,8 @@ char 			prefix[32];
 	if (type->level_names!=NULL)
 	     fprintf(file,"	None,	lnames_%s\n    }",prefix);
 	else fprintf(file,"	None,	NULL\n    }");
+	free(prefix);
+	prefix = NULL;
     }
     fprintf(file,"\n};\n");
     fprintf(file,"#define num_dflt_types (sizeof(dflt_types)/sizeof(XkbKeyTypeRec))\n");

commit e695be2ab7eb1361b204f98c3da872eff58ad6b5
Author: Alexey Ten <alexeyten+github@gmail.com>
Date:   Thu Jan 15 01:39:01 2009 +0300

    Apply partial matches for option (#19563)
    
    Rules which match star (*) and option, like one below, should be applied
    
    layout[2] option    = symbols
    *         misc:typo = +typo(base)
    
    X.Org bug 19563 <http://bugs.freedesktop.org/show_bug.cgi?id=19563>
    
    Signed-off-by: Sergey V. Udaltsov <svu@gnome.org>

diff --git a/src/maprules.c b/src/maprules.c
index ab164c6..6060a03 100644
--- a/src/maprules.c
+++ b/src/maprules.c
@@ -891,6 +891,7 @@ XkbRF_GetComponents(	XkbRF_RulesPtr		rules,
     XkbRF_CheckApplyRules(rules, &mdefs, names, XkbRF_Append);
     XkbRF_ApplyPartialMatches(rules, names);
     XkbRF_CheckApplyRules(rules, &mdefs, names, XkbRF_Option);
+    XkbRF_ApplyPartialMatches(rules, names);
 
     if (names->keycodes)
 	names->keycodes= XkbRF_SubstituteVars(names->keycodes, &mdefs);


Reply to: