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 * char *
XkbAtomText(Atom atm, unsigned format) XkbAtomText(Atom atm, unsigned format)
{ {
@ -78,11 +92,7 @@ XkbAtomText(Atom atm, unsigned format)
atmstr = NameForAtom(atm); atmstr = NameForAtom(atm);
if (atmstr != NULL) { if (atmstr != NULL) {
int len; rtrn = tbGetBufferString(atmstr);
len = strlen(atmstr) + 1;
rtrn = tbGetBuffer(len);
strlcpy(rtrn, atmstr, len);
} }
else { else {
rtrn = tbGetBuffer(1); rtrn = tbGetBuffer(1);
@ -232,7 +242,6 @@ static const char *modNames[XkbNumModifiers] = {
char * char *
XkbModIndexText(unsigned ndx, unsigned format) XkbModIndexText(unsigned ndx, unsigned format)
{ {
char *rtrn;
char buf[100]; char buf[100];
if (format == XkbCFile) { if (format == XkbCFile) {
@ -251,9 +260,7 @@ XkbModIndexText(unsigned ndx, unsigned format)
else else
snprintf(buf, sizeof(buf), "ILLEGAL_%02x", ndx); snprintf(buf, sizeof(buf), "ILLEGAL_%02x", ndx);
} }
rtrn = tbGetBuffer(strlen(buf) + 1); return tbGetBufferString(buf);
strcpy(rtrn, buf);
return rtrn;
} }
char * char *
@ -295,8 +302,7 @@ XkbModMaskText(unsigned mask, unsigned format)
} }
} }
} }
rtrn = tbGetBuffer(strlen(buf) + 1); rtrn = tbGetBufferString(buf);
strcpy(rtrn, buf);
return rtrn; return rtrn;
} }
@ -1228,7 +1234,7 @@ static actionCopy copyActionArgs[XkbSA_NumActions] = {
char * char *
XkbActionText(XkbDescPtr xkb, XkbAction *action, unsigned format) XkbActionText(XkbDescPtr xkb, XkbAction *action, unsigned format)
{ {
char buf[ACTION_SZ], *tmp; char buf[ACTION_SZ];
int sz; int sz;
if (format == XkbCFile) { if (format == XkbCFile) {
@ -1249,16 +1255,13 @@ XkbActionText(XkbDescPtr xkb, XkbAction *action, unsigned format)
CopyOtherArgs(xkb, action, buf, &sz); CopyOtherArgs(xkb, action, buf, &sz);
TryCopyStr(buf, ")", &sz); TryCopyStr(buf, ")", &sz);
} }
tmp = tbGetBuffer(strlen(buf) + 1); return tbGetBufferString(buf);
if (tmp != NULL)
strcpy(tmp, buf);
return tmp;
} }
char * char *
XkbBehaviorText(XkbDescPtr xkb, XkbBehavior * behavior, unsigned format) XkbBehaviorText(XkbDescPtr xkb, XkbBehavior * behavior, unsigned format)
{ {
char buf[256], *tmp; char buf[256];
if (format == XkbCFile) { if (format == XkbCFile) {
if (behavior->type == XkbKB_Default) if (behavior->type == XkbKB_Default)
@ -1279,6 +1282,7 @@ XkbBehaviorText(XkbDescPtr xkb, XkbBehavior * behavior, unsigned format)
} }
else if (type == XkbKB_RadioGroup) { else if (type == XkbKB_RadioGroup) {
int g; int g;
char *tmp;
size_t tmpsize; size_t tmpsize;
g = ((behavior->data) & (~XkbKB_RGAllowNone)) + 1; 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); snprintf(buf, sizeof(buf), "overlay%d= %s", ndx, kn);
} }
} }
tmp = tbGetBuffer(strlen(buf) + 1); return tbGetBufferString(buf);
if (tmp != NULL)
strcpy(tmp, buf);
return tmp;
} }
/***====================================================================***/ /***====================================================================***/