xkb: Add tbGetBufferString helper function

Handles common case of allocating & copying string to temporary buffer

(cherry picked from xorg/lib/libxkbfile@8a91517ca6ea77633476595b0eb5b213357c60e5)

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1821>
This commit is contained in:
Alan Coopersmith 2023-10-08 13:22:13 -07:00 committed by Marge Bot
parent 7a23010232
commit 42a1f25faf

View File

@ -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);
}
/***====================================================================***/