[PATCH:setxkbmap] Use snprintf instead of trying to pre-measure sprintf result sizes.
Mark Kettenis
mark.kettenis at xs4all.nl
Mon Feb 14 02:54:01 PST 2011
> From: Alan Coopersmith <alan.coopersmith at oracle.com>
> Date: Thu, 10 Feb 2011 00:00:11 -0800
>
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
> ---
> setxkbmap.c | 7 +++----
> 1 files changed, 3 insertions(+), 4 deletions(-)
Isn't it better to use sizeof(buf) instead of PATH_MAX?
> diff --git a/setxkbmap.c b/setxkbmap.c
> index 868b727..9593ba4 100644
> --- a/setxkbmap.c
> +++ b/setxkbmap.c
> @@ -626,14 +626,13 @@ findFileInPath(char *name, char *subdir)
> }
> for (i = 0; (i < numInclPath); i++)
> {
> - if ((strlen(inclPath[i]) + strlen(subdir) + strlen(name) + 2) >
> + if (snprintf(buf, PATH_MAX, "%s/%s%s", inclPath[i], subdir, name) >=
> PATH_MAX)
> {
> VMSG3(0, "Path too long (%s/%s%s). Ignored.\n", inclPath[i],
> subdir, name);
> continue;
> }
> - sprintf(buf, "%s/%s%s", inclPath[i], subdir, name);
> fp = fopen(name, "r");
> if ((verbose > 7) || ((!fp) && (verbose > 5)))
> MSG2("%s file %s\n", (fp ? "Found" : "Didn't find"), buf);
> @@ -845,13 +844,13 @@ applyRules(void)
> * we succeed with */
> for (i = 0; (i < numInclPath) && (!rules); i++)
> {
> - if ((strlen(inclPath[i]) + strlen(rfName) + 8) > PATH_MAX)
> + if (snprintf(buf, PATH_MAX, "%s/rules/%s", inclPath[i],
> + svValue[RULES_NDX]) >= PATH_MAX)
> {
> VMSG2(0, "Path too long (%s/rules/%s). Ignored.\n",
> inclPath[i], rfName);
> continue;
> }
> - sprintf(buf, "%s/rules/%s", inclPath[i], svValue[RULES_NDX]);
> rules = XkbRF_Load(buf, svValue[LOCALE_NDX], True, True);
> }
> }
More information about the xorg-devel
mailing list