--- dwm.c | 16 +++++++++------- util.c | 40 ++++++++++++++++++++++++++++++++++++++++ util.h | 3 +++ 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/dwm.c b/dwm.c index ff7e096..d45916c 100644 --- a/dwm.c +++ b/dwm.c _AT_@ -393,7 +393,7 @@ arrange(Monitor *m) void arrangemon(Monitor *m) { - strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); + strlcpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof(m->ltsymbol)); if (m->lt[m->sellt]->arrange) m->lt[m->sellt]->arrange(m); } _AT_@ -654,7 +654,8 @@ createmon(void) m->topbar = topbar; m->lt[0] = &layouts[0]; m->lt[1] = &layouts[1 % LENGTH(layouts)]; - strncpy(m->ltsymbol, layouts[0].symbol, sizeof m->ltsymbol); + strlcpy(m->ltsymbol, layouts[0].symbol, sizeof(m->ltsymbol)); + return m; } _AT_@ -931,10 +932,10 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) if (!name.nitems) return 0; if (name.encoding == XA_STRING) - strncpy(text, (char *)name.value, size - 1); + strlcpy(text, (char *)name.value, size - 1); else { if (XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { - strncpy(text, *list, size - 1); + strlcpy(text, *list, size - 1); XFreeStringList(list); } } _AT_@ -1526,7 +1527,8 @@ setlayout(const Arg *arg) selmon->sellt ^= 1; if (arg && arg->v) selmon->lt[selmon->sellt] = (Layout *)arg->v; - strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, sizeof selmon->ltsymbol); + strlcpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, + sizeof(selmon->ltsymbol)); if (selmon->sel) arrange(selmon); else _AT_@ -1991,14 +1993,14 @@ updatetitle(Client *c) if (!gettextprop(c->win, netatom[NetWMName], c->name, sizeof c->name)) gettextprop(c->win, XA_WM_NAME, c->name, sizeof c->name); if (c->name[0] == '\0') /* hack to mark broken clients */ - strcpy(c->name, broken); + strlcpy(c->name, broken, sizeof(c->name)); } void updatestatus(void) { if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) - strcpy(stext, "dwm-"VERSION); + strlcpy(stext, "dwm-"VERSION, sizeof(stext)); drawbar(selmon); } diff --git a/util.c b/util.c index 6b703e9..ac4372f 100644 --- a/util.c +++ b/util.c _AT_@ -31,3 +31,43 @@ die(const char *fmt, ...) { exit(1); } + +/* + * Copyright (c) 1998, 2015 Todd C. Miller <Todd.Miller_AT_courtesan.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +size_t +strlcpy(char *dst, const char *src, size_t dsize) +{ + const char *osrc = src; + size_t nleft = dsize; + + /* Copy as many bytes as will fit. */ + if (nleft != 0) { + while (--nleft != 0) { + if ((*dst++ = *src++) == '\0') + break; + } + } + + /* Not enough room in dst, add NUL and traverse rest of src. */ + if (nleft == 0) { + if (dsize != 0) + *dst = '\0'; /* NUL-terminate dst */ + while (*src++) + ; + } + + return(src - osrc - 1); /* count does not include NUL */ +} diff --git a/util.h b/util.h index cded043..ce29b77 100644 --- a/util.h +++ b/util.h _AT_@ -1,4 +1,5 @@ /* See LICENSE file for copyright and license details. */ +#include <sys/types.h> #define MAX(A, B) ((A) > (B) ? (A) : (B)) #define MIN(A, B) ((A) < (B) ? (A) : (B)) _AT_@ -6,3 +7,5 @@ void die(const char *errstr, ...); void *ecalloc(size_t, size_t); +#undef strlcpy +size_t strlcpy(char *, const char *, size_t); -- 2.4.10 --Multipart=_Thu__2_Jun_2016_21_57_01_+0200_wJwYxaJ_svQyYsik--Received on Mon Sep 17 2001 - 00:00:00 CEST
This archive was generated by hypermail 2.3.0 : Thu Jun 02 2016 - 22:00:15 CEST