summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2009-05-08 14:15:21 -0400
committerAdam Jackson <ajax@redhat.com>2009-05-08 14:15:21 -0400
commitd36a99d961c6649ca1b0319c2aadc6763edb07ad (patch)
tree5dd7b28ec56eab55806c209d327b03cb49cc54fd
parent29f27b16dbe511a27a0e953b32913f9d9bf24f2d (diff)
downloadxorg-lib-libxkbfile-d36a99d961c6649ca1b0319c2aadc6763edb07ad.tar.gz
Semi-revert 33b839e16fe681ba915658f824ceb1b252084ea4
_XkbDupString() checks for NULL, strdup doesn't. Still, implement in terms of real strdup and skip the calloc.
-rw-r--r--src/XKBfileInt.h6
-rw-r--r--src/maprules.c50
-rw-r--r--src/xkbconfig.c6
-rw-r--r--src/xkmread.c10
4 files changed, 39 insertions, 33 deletions
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,