diff --git a/xkb/xkbtext.c b/xkb/xkbtext.c index 188c9ffb1..5d8caf4fb 100644 --- a/xkb/xkbtext.c +++ b/xkb/xkbtext.c @@ -70,6 +70,20 @@ tbGetBuffer(unsigned size) /***====================================================================***/ +static inline char * +tbGetBufferString(const char *str) +{ + size_t size = strlen(str) + 1; + char *rtrn = tbGetBuffer((unsigned) size); + + if (rtrn != NULL) + memcpy(rtrn, str, size); + + return rtrn; +} + +/***====================================================================***/ + char * XkbAtomText(Atom atm, unsigned format) { @@ -78,11 +92,7 @@ XkbAtomText(Atom atm, unsigned format) atmstr = NameForAtom(atm); if (atmstr != NULL) { - int len; - - len = strlen(atmstr) + 1; - rtrn = tbGetBuffer(len); - strlcpy(rtrn, atmstr, len); + rtrn = tbGetBufferString(atmstr); } else { rtrn = tbGetBuffer(1); @@ -232,7 +242,6 @@ static const char *modNames[XkbNumModifiers] = { char * XkbModIndexText(unsigned ndx, unsigned format) { - char *rtrn; char buf[100]; if (format == XkbCFile) { @@ -251,9 +260,7 @@ XkbModIndexText(unsigned ndx, unsigned format) else snprintf(buf, sizeof(buf), "ILLEGAL_%02x", ndx); } - rtrn = tbGetBuffer(strlen(buf) + 1); - strcpy(rtrn, buf); - return rtrn; + return tbGetBufferString(buf); } char * @@ -295,8 +302,7 @@ XkbModMaskText(unsigned mask, unsigned format) } } } - rtrn = tbGetBuffer(strlen(buf) + 1); - strcpy(rtrn, buf); + rtrn = tbGetBufferString(buf); return rtrn; } @@ -1228,7 +1234,7 @@ static actionCopy copyActionArgs[XkbSA_NumActions] = { char * XkbActionText(XkbDescPtr xkb, XkbAction *action, unsigned format) { - char buf[ACTION_SZ], *tmp; + char buf[ACTION_SZ]; int sz; if (format == XkbCFile) { @@ -1249,16 +1255,13 @@ XkbActionText(XkbDescPtr xkb, XkbAction *action, unsigned format) CopyOtherArgs(xkb, action, buf, &sz); TryCopyStr(buf, ")", &sz); } - tmp = tbGetBuffer(strlen(buf) + 1); - if (tmp != NULL) - strcpy(tmp, buf); - return tmp; + return tbGetBufferString(buf); } char * XkbBehaviorText(XkbDescPtr xkb, XkbBehavior * behavior, unsigned format) { - char buf[256], *tmp; + char buf[256]; if (format == XkbCFile) { if (behavior->type == XkbKB_Default) @@ -1279,6 +1282,7 @@ XkbBehaviorText(XkbDescPtr xkb, XkbBehavior * behavior, unsigned format) } else if (type == XkbKB_RadioGroup) { int g; + char *tmp; size_t tmpsize; g = ((behavior->data) & (~XkbKB_RGAllowNone)) + 1; @@ -1314,10 +1318,7 @@ XkbBehaviorText(XkbDescPtr xkb, XkbBehavior * behavior, unsigned format) snprintf(buf, sizeof(buf), "overlay%d= %s", ndx, kn); } } - tmp = tbGetBuffer(strlen(buf) + 1); - if (tmp != NULL) - strcpy(tmp, buf); - return tmp; + return tbGetBufferString(buf); } /***====================================================================***/