mirror of
https://github.com/leahneukirchen/cwm.git
synced 2023-08-10 21:13:12 +03:00
Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
73cef0ffb0 | ||
![]() |
9eb763ab87 | ||
![]() |
481894147a | ||
![]() |
4a6128d5e4 | ||
![]() |
c55191fdc5 | ||
![]() |
4e73ce533c | ||
![]() |
7af3a7b8b6 | ||
![]() |
496bcc879d | ||
![]() |
5e5221d82d | ||
![]() |
7c22b36a23 | ||
![]() |
81a08ddb89 | ||
![]() |
35b0da9202 | ||
![]() |
a9eeb04606 | ||
![]() |
055b84f4d4 | ||
![]() |
ce65ff30c7 | ||
![]() |
d46f34f01e | ||
![]() |
f24dd47517 |
11
Makefile
11
Makefile
@ -11,7 +11,7 @@ SRCS= calmwm.c screen.c xmalloc.c client.c menu.c \
|
||||
|
||||
OBJS= calmwm.o screen.o xmalloc.o client.o menu.o \
|
||||
search.o util.o xutil.o conf.o xevents.o group.o \
|
||||
kbfunc.o strlcpy.o strlcat.o y.tab.o \
|
||||
kbfunc.o strlcpy.o strlcat.o parse.o \
|
||||
strtonum.o reallocarray.o
|
||||
|
||||
PKG_CONFIG?= pkg-config
|
||||
@ -27,12 +27,9 @@ MANPREFIX?= ${PREFIX}/share/man
|
||||
all: ${PROG}
|
||||
|
||||
clean:
|
||||
rm -f ${OBJS} ${PROG} y.tab.c
|
||||
rm -f ${OBJS} ${PROG} parse.c
|
||||
|
||||
y.tab.c: parse.y
|
||||
yacc parse.y
|
||||
|
||||
${PROG}: ${OBJS} y.tab.o
|
||||
${PROG}: ${OBJS}
|
||||
${CC} ${OBJS} ${LDFLAGS} -o ${PROG}
|
||||
|
||||
.c.o:
|
||||
@ -53,3 +50,5 @@ sign:
|
||||
gpg2 --armor --detach-sign cwm-$$VERSION.tar.gz && \
|
||||
signify -S -s ~/.signify/cwm.sec -m cwm-$$VERSION.tar.gz && \
|
||||
sed -i '1cuntrusted comment: verify with cwm.pub' cwm-$$VERSION.tar.gz.sig
|
||||
|
||||
.PRECIOUS: parse.c
|
||||
|
14
README
14
README
@ -15,7 +15,8 @@ Releases are roughly coordinated.
|
||||
The revision controlled version is at https://github.com/leahneukirchen/cwm
|
||||
Releases can be found at http://leahneukirchen.org/releases
|
||||
|
||||
You are welcome to join the IRC channel ##cwm on Freenode to talk about cwm.
|
||||
You are welcome to join the IRC channel ##cwm on irc.libera.chat
|
||||
to talk about cwm.
|
||||
|
||||
|
||||
ChangeLog:
|
||||
@ -129,6 +130,17 @@ Changes made between OpenBSD 6.6 and 6.7
|
||||
* Allowed use of window-htile and window-vtile with the "empty" group
|
||||
clients in cwm(1).
|
||||
|
||||
2022-04-30: Eighth public release 7.1 of portable cwm.
|
||||
|
||||
Changes made between OpenBSD 6.9 and 7.0
|
||||
* Changed cwm(1) maximization and full-screen mode toggling to keep
|
||||
the cursor within the window, preventing focus loss.
|
||||
|
||||
Changes made between OpenBSD 7.0 and 7.1
|
||||
* Added a cwm(1) "group-last" command that shows only the previously
|
||||
active group.
|
||||
* Allowed bare numbers for key and mouse bindings in cwm(1).
|
||||
|
||||
|
||||
--Leah Neukirchen <leah@vuxu.org>
|
||||
|
||||
|
49
calmwm.h
49
calmwm.h
@ -235,6 +235,7 @@ struct screen_ctx {
|
||||
struct region_q regionq;
|
||||
struct group_q groupq;
|
||||
struct group_ctx *group_active;
|
||||
struct group_ctx *group_last;
|
||||
Colormap colormap;
|
||||
Visual *visual;
|
||||
struct {
|
||||
@ -329,30 +330,39 @@ struct conf {
|
||||
|
||||
/* MWM hints */
|
||||
struct mwm_hints {
|
||||
#define MWM_HINTS_ELEMENTS 3L
|
||||
#define MWM_FLAGS_STATUS (1<<3)
|
||||
#define MWM_HINTS_ELEMENTS 5L
|
||||
|
||||
#define MWM_FLAGS_FUNCTIONS (1<<0)
|
||||
#define MWM_FLAGS_DECORATIONS (1<<1)
|
||||
#define MWM_FLAGS_INPUT_MODE (1<<2)
|
||||
#define MWM_HINTS_FUNCTIONS (1L << 0)
|
||||
#define MWM_HINTS_DECORATIONS (1L << 1)
|
||||
#define MWM_HINTS_INPUT_MODE (1L << 2)
|
||||
#define MWM_HINTS_STATUS (1L << 3)
|
||||
unsigned long flags;
|
||||
|
||||
#define MWM_FUNCS_ALL (1<<0)
|
||||
#define MWM_FUNCS_RESIZE (1<<1)
|
||||
#define MWM_FUNCS_MOVE (1<<2)
|
||||
#define MWM_FUNCS_MINIMIZE (1<<3)
|
||||
#define MWM_FUNCS_MAXIMIZE (1<<4)
|
||||
#define MWM_FUNCS_CLOSE (1<<5)
|
||||
#define MWM_FUNC_ALL (1L << 0)
|
||||
#define MWM_FUNC_RESIZE (1L << 1)
|
||||
#define MWM_FUNC_MOVE (1L << 2)
|
||||
#define MWM_FUNC_MINIMIZE (1L << 3)
|
||||
#define MWM_FUNC_MAXIMIZE (1L << 4)
|
||||
#define MWM_FUNC_CLOSE (1L << 5)
|
||||
unsigned long functions;
|
||||
|
||||
#define MWM_DECOR_ALL (1<<0)
|
||||
#define MWM_DECOR_BORDER (1<<1)
|
||||
#define MWM_DECOR_RESIZE_HANDLE (1<<2)
|
||||
#define MWM_DECOR_TITLEBAR (1<<3)
|
||||
#define MWM_DECOR_MENU (1<<4)
|
||||
#define MWM_DECOR_MINIMIZE (1<<5)
|
||||
#define MWM_DECOR_MAXIMIZE (1<<6)
|
||||
#define MWM_DECOR_ALL (1L << 0)
|
||||
#define MWM_DECOR_BORDER (1L << 1)
|
||||
#define MWM_DECOR_RESIZEH (1L << 2)
|
||||
#define MWM_DECOR_TITLE (1L << 3)
|
||||
#define MWM_DECOR_MENU (1L << 4)
|
||||
#define MWM_DECOR_MINIMIZE (1L << 5)
|
||||
#define MWM_DECOR_MAXIMIZE (1L << 6)
|
||||
unsigned long decorations;
|
||||
|
||||
#define MWM_INPUT_MODELESS 0
|
||||
#define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
|
||||
#define MWM_INPUT_SYSTEM_MODAL 2
|
||||
#define MWM_INPUT_FULL_APPLICATION_MODAL 3
|
||||
long inputMode;
|
||||
|
||||
#define MWM_TEAROFF_WINDOW (1L << 0)
|
||||
unsigned long status;
|
||||
};
|
||||
|
||||
enum cwmh {
|
||||
@ -524,6 +534,7 @@ void kbfunc_client_toggle_group(void *, struct cargs *);
|
||||
void kbfunc_client_movetogroup(void *, struct cargs *);
|
||||
void kbfunc_group_toggle(void *, struct cargs *);
|
||||
void kbfunc_group_only(void *, struct cargs *);
|
||||
void kbfunc_group_last(void *, struct cargs *);
|
||||
void kbfunc_group_close(void *, struct cargs *);
|
||||
void kbfunc_group_cycle(void *, struct cargs *);
|
||||
void kbfunc_group_toggle_all(void *, struct cargs *);
|
||||
@ -597,7 +608,7 @@ int xu_ewmh_get_net_wm_desktop(struct client_ctx *, long *);
|
||||
void xu_ewmh_set_net_wm_desktop(struct client_ctx *);
|
||||
Atom *xu_ewmh_get_net_wm_state(struct client_ctx *, int *);
|
||||
void xu_ewmh_handle_net_wm_state_msg(struct client_ctx *,
|
||||
int, Atom , Atom);
|
||||
int, Atom, Atom);
|
||||
void xu_ewmh_set_net_wm_state(struct client_ctx *);
|
||||
void xu_ewmh_restore_net_wm_state(struct client_ctx *);
|
||||
|
||||
|
18
client.c
18
client.c
@ -336,6 +336,7 @@ client_toggle_fullscreen(struct client_ctx *cc)
|
||||
resize:
|
||||
client_resize(cc, 0);
|
||||
xu_ewmh_set_net_wm_state(cc);
|
||||
client_ptr_inbound(cc, 1);
|
||||
}
|
||||
|
||||
void
|
||||
@ -376,6 +377,7 @@ client_toggle_maximize(struct client_ctx *cc)
|
||||
resize:
|
||||
client_resize(cc, 0);
|
||||
xu_ewmh_set_net_wm_state(cc);
|
||||
client_ptr_inbound(cc, 1);
|
||||
}
|
||||
|
||||
void
|
||||
@ -408,6 +410,7 @@ client_toggle_vmaximize(struct client_ctx *cc)
|
||||
resize:
|
||||
client_resize(cc, 0);
|
||||
xu_ewmh_set_net_wm_state(cc);
|
||||
client_ptr_inbound(cc, 1);
|
||||
}
|
||||
|
||||
void
|
||||
@ -440,6 +443,7 @@ client_toggle_hmaximize(struct client_ctx *cc)
|
||||
resize:
|
||||
client_resize(cc, 0);
|
||||
xu_ewmh_set_net_wm_state(cc);
|
||||
client_ptr_inbound(cc, 1);
|
||||
}
|
||||
|
||||
void
|
||||
@ -592,7 +596,7 @@ client_draw_border(struct client_ctx *cc)
|
||||
pixel = sc->xftcolor[CWM_COLOR_BORDER_URGENCY].pixel;
|
||||
|
||||
XSetWindowBorderWidth(X_Dpy, cc->win, (unsigned int)cc->bwidth);
|
||||
XSetWindowBorder(X_Dpy, cc->win, pixel);
|
||||
XSetWindowBorder(X_Dpy, cc->win, pixel | (0xffu << 24));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -845,13 +849,15 @@ client_mwm_hints(struct client_ctx *cc)
|
||||
|
||||
if (xu_get_prop(cc->win, cwmh[_MOTIF_WM_HINTS],
|
||||
cwmh[_MOTIF_WM_HINTS], MWM_HINTS_ELEMENTS,
|
||||
(unsigned char **)&mwmh) == MWM_HINTS_ELEMENTS) {
|
||||
if (mwmh->flags & MWM_FLAGS_DECORATIONS &&
|
||||
!(mwmh->decorations & MWM_DECOR_ALL) &&
|
||||
!(mwmh->decorations & MWM_DECOR_BORDER))
|
||||
(unsigned char **)&mwmh) <= 0)
|
||||
return;
|
||||
|
||||
if ((mwmh->flags & MWM_HINTS_DECORATIONS) &&
|
||||
!(mwmh->decorations & MWM_DECOR_ALL)) {
|
||||
if (!(mwmh->decorations & MWM_DECOR_BORDER))
|
||||
cc->bwidth = 0;
|
||||
XFree(mwmh);
|
||||
}
|
||||
XFree(mwmh);
|
||||
}
|
||||
|
||||
void
|
||||
|
3
conf.c
3
conf.c
@ -139,6 +139,7 @@ static const struct {
|
||||
|
||||
{ FUNC_SC(group-cycle, group_cycle, (CWM_CYCLE_FORWARD)) },
|
||||
{ FUNC_SC(group-rcycle, group_cycle, (CWM_CYCLE_REVERSE)) },
|
||||
{ FUNC_SC(group-last, group_last, 0) },
|
||||
{ FUNC_SC(group-toggle-all, group_toggle_all, 0) },
|
||||
{ FUNC_SC(group-toggle-1, group_toggle, 1) },
|
||||
{ FUNC_SC(group-toggle-2, group_toggle, 2) },
|
||||
@ -669,6 +670,8 @@ conf_grab_kbd(Window win)
|
||||
|
||||
TAILQ_FOREACH(kb, &Conf.keybindq, entry) {
|
||||
kc = XKeysymToKeycode(X_Dpy, kb->press.keysym);
|
||||
if (kc == 0)
|
||||
continue;
|
||||
if ((XkbKeycodeToKeysym(X_Dpy, kc, 0, 0) != kb->press.keysym) &&
|
||||
(XkbKeycodeToKeysym(X_Dpy, kc, 0, 1) == kb->press.keysym))
|
||||
kb->modmask |= ShiftMask;
|
||||
|
2
cwmrc.5
2
cwmrc.5
@ -273,6 +273,8 @@ menu.
|
||||
Toggle visibility of group n, where n is 1-9.
|
||||
.It group-only-[n]
|
||||
Show only group n, where n is 1-9, hiding other groups.
|
||||
.It group-last
|
||||
Show only the previously active group.
|
||||
.It group-close-[n]
|
||||
Close all windows in group n, where n is 1-9.
|
||||
.It group-toggle-all
|
||||
|
3
group.c
3
group.c
@ -215,6 +215,9 @@ group_only(struct screen_ctx *sc, int idx)
|
||||
{
|
||||
struct group_ctx *gc;
|
||||
|
||||
if (sc->group_last != sc->group_active)
|
||||
sc->group_last = sc->group_active;
|
||||
|
||||
TAILQ_FOREACH(gc, &sc->groupq, entry) {
|
||||
if (gc->num == idx)
|
||||
group_show(gc);
|
||||
|
19
kbfunc.c
19
kbfunc.c
@ -453,7 +453,16 @@ kbfunc_client_cycle(void *ctx, struct cargs *cargs)
|
||||
newcc->ptr.x = newcc->geom.w / 2;
|
||||
newcc->ptr.y = newcc->geom.h / 2;
|
||||
}
|
||||
client_ptr_warp(newcc);
|
||||
|
||||
/* When no client is active, warp pointer to last active. */
|
||||
if (oldcc->flags & (CLIENT_ACTIVE))
|
||||
client_ptr_warp(newcc);
|
||||
else if (oldcc->flags & (CLIENT_SKIP_CYCLE))
|
||||
client_ptr_warp(newcc);
|
||||
else {
|
||||
client_raise(oldcc);
|
||||
client_ptr_warp(oldcc);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -481,6 +490,14 @@ kbfunc_group_only(void *ctx, struct cargs *cargs)
|
||||
group_only(ctx, cargs->flag);
|
||||
}
|
||||
|
||||
void
|
||||
kbfunc_group_last(void *ctx, struct cargs *cargs)
|
||||
{
|
||||
struct screen_ctx *sc = ctx;
|
||||
|
||||
group_only(ctx, sc->group_last->num);
|
||||
}
|
||||
|
||||
void
|
||||
kbfunc_group_toggle(void *ctx, struct cargs *cargs)
|
||||
{
|
||||
|
25
menu.c
25
menu.c
@ -355,7 +355,7 @@ menu_draw(struct menu_ctx *mc, struct menu_q *menuq, struct menu_q *resultq)
|
||||
XftTextExtentsUtf8(X_Dpy, sc->xftfont,
|
||||
(const FcChar8*)mc->dispstr, strlen(mc->dispstr), &extents);
|
||||
mc->geom.w = extents.xOff;
|
||||
mc->geom.h = sc->xftfont->height + 1;
|
||||
mc->geom.h = sc->xftfont->ascent + sc->xftfont->descent;
|
||||
mc->num = 1;
|
||||
|
||||
TAILQ_FOREACH(mi, resultq, resultentry) {
|
||||
@ -364,7 +364,7 @@ menu_draw(struct menu_ctx *mc, struct menu_q *menuq, struct menu_q *resultq)
|
||||
(const FcChar8*)mi->print,
|
||||
MIN(strlen(mi->print), MENU_MAXENTRY), &extents);
|
||||
mc->geom.w = MAX(mc->geom.w, extents.xOff);
|
||||
mc->geom.h += sc->xftfont->height + 1;
|
||||
mc->geom.h += sc->xftfont->ascent + sc->xftfont->descent;
|
||||
mc->num++;
|
||||
}
|
||||
|
||||
@ -403,15 +403,15 @@ menu_draw(struct menu_ctx *mc, struct menu_q *menuq, struct menu_q *resultq)
|
||||
(const FcChar8*)mc->dispstr, strlen(mc->dispstr));
|
||||
|
||||
TAILQ_FOREACH(mi, resultq, resultentry) {
|
||||
int y = n * (sc->xftfont->height + 1) + sc->xftfont->ascent + 1;
|
||||
int y = n * (sc->xftfont->ascent + sc->xftfont->descent);
|
||||
|
||||
/* Stop drawing when menu doesn't fit inside the screen. */
|
||||
if (mc->geom.y + y > area.h)
|
||||
if (mc->geom.y + y >= area.h)
|
||||
break;
|
||||
|
||||
XftDrawStringUtf8(mc->xftdraw,
|
||||
&sc->xftcolor[CWM_COLOR_MENU_FONT], sc->xftfont,
|
||||
0, y,
|
||||
0, y + sc->xftfont->ascent,
|
||||
(const FcChar8*)mi->print, strlen(mi->print));
|
||||
n++;
|
||||
}
|
||||
@ -425,7 +425,7 @@ menu_draw_entry(struct menu_ctx *mc, struct menu_q *resultq,
|
||||
{
|
||||
struct screen_ctx *sc = mc->sc;
|
||||
struct menu *mi;
|
||||
int color, i = 1;
|
||||
int color, i = 1, y;
|
||||
|
||||
TAILQ_FOREACH(mi, resultq, resultentry)
|
||||
if (entry == i++)
|
||||
@ -433,14 +433,13 @@ menu_draw_entry(struct menu_ctx *mc, struct menu_q *resultq,
|
||||
if (mi == NULL)
|
||||
return;
|
||||
|
||||
y = entry * (sc->xftfont->ascent + sc->xftfont->descent);
|
||||
color = (active) ? CWM_COLOR_MENU_FG : CWM_COLOR_MENU_BG;
|
||||
XftDrawRect(mc->xftdraw, &sc->xftcolor[color], 0,
|
||||
(sc->xftfont->height + 1) * entry, mc->geom.w,
|
||||
(sc->xftfont->height + 1) + sc->xftfont->descent);
|
||||
XftDrawRect(mc->xftdraw, &sc->xftcolor[color], 0, y,
|
||||
mc->geom.w, sc->xftfont->ascent + sc->xftfont->descent);
|
||||
color = (active) ? CWM_COLOR_MENU_FONT_SEL : CWM_COLOR_MENU_FONT;
|
||||
XftDrawStringUtf8(mc->xftdraw,
|
||||
&sc->xftcolor[color], sc->xftfont,
|
||||
0, (sc->xftfont->height + 1) * entry + sc->xftfont->ascent + 1,
|
||||
&sc->xftcolor[color], sc->xftfont, 0, y + sc->xftfont->ascent,
|
||||
(const FcChar8*)mi->print, strlen(mi->print));
|
||||
}
|
||||
|
||||
@ -487,11 +486,11 @@ menu_calc_entry(struct menu_ctx *mc, int x, int y)
|
||||
struct screen_ctx *sc = mc->sc;
|
||||
int entry;
|
||||
|
||||
entry = y / (sc->xftfont->height + 1);
|
||||
entry = y / (sc->xftfont->ascent + sc->xftfont->descent);
|
||||
|
||||
/* in bounds? */
|
||||
if (x < 0 || x > mc->geom.w || y < 0 ||
|
||||
y > (sc->xftfont->height + 1) * mc->num ||
|
||||
y > (sc->xftfont->ascent + sc->xftfont->descent) * mc->num ||
|
||||
entry < 0 || entry >= mc->num)
|
||||
entry = -1;
|
||||
|
||||
|
41
parse.y
41
parse.y
@ -83,7 +83,7 @@ typedef struct {
|
||||
%token <v.string> STRING
|
||||
%token <v.number> NUMBER
|
||||
%type <v.number> yesno
|
||||
%type <v.string> string
|
||||
%type <v.string> string numberstring
|
||||
%%
|
||||
|
||||
grammar : /* empty */
|
||||
@ -106,6 +106,17 @@ string : string STRING {
|
||||
| STRING
|
||||
;
|
||||
|
||||
numberstring : NUMBER {
|
||||
char *s;
|
||||
if (asprintf(&s, "%lld", $1) == -1) {
|
||||
yyerror("string: asprintf");
|
||||
YYERROR;
|
||||
}
|
||||
$$ = s;
|
||||
}
|
||||
| STRING
|
||||
;
|
||||
|
||||
yesno : YES { $$ = 1; }
|
||||
| NO { $$ = 0; }
|
||||
;
|
||||
@ -211,7 +222,7 @@ main : FONTNAME STRING {
|
||||
conf->gap.left = $4;
|
||||
conf->gap.right = $5;
|
||||
}
|
||||
| BINDKEY STRING string {
|
||||
| BINDKEY numberstring string {
|
||||
if (!conf_bind_key(conf, $2, $3)) {
|
||||
yyerror("invalid bind-key: %s %s", $2, $3);
|
||||
free($2);
|
||||
@ -221,7 +232,7 @@ main : FONTNAME STRING {
|
||||
free($2);
|
||||
free($3);
|
||||
}
|
||||
| UNBINDKEY STRING {
|
||||
| UNBINDKEY numberstring {
|
||||
if (!conf_bind_key(conf, $2, NULL)) {
|
||||
yyerror("invalid unbind-key: %s", $2);
|
||||
free($2);
|
||||
@ -229,7 +240,7 @@ main : FONTNAME STRING {
|
||||
}
|
||||
free($2);
|
||||
}
|
||||
| BINDMOUSE STRING string {
|
||||
| BINDMOUSE numberstring string {
|
||||
if (!conf_bind_mouse(conf, $2, $3)) {
|
||||
yyerror("invalid bind-mouse: %s %s", $2, $3);
|
||||
free($2);
|
||||
@ -239,7 +250,7 @@ main : FONTNAME STRING {
|
||||
free($2);
|
||||
free($3);
|
||||
}
|
||||
| UNBINDMOUSE STRING {
|
||||
| UNBINDMOUSE numberstring {
|
||||
if (!conf_bind_mouse(conf, $2, NULL)) {
|
||||
yyerror("invalid unbind-mouse: %s", $2);
|
||||
free($2);
|
||||
@ -376,7 +387,7 @@ lgetc(int quotec)
|
||||
if (parsebuf) {
|
||||
/* Read character from the parsebuffer instead of input. */
|
||||
if (parseindex >= 0) {
|
||||
c = parsebuf[parseindex++];
|
||||
c = (unsigned char)parsebuf[parseindex++];
|
||||
if (c != '\0')
|
||||
return (c);
|
||||
parsebuf = NULL;
|
||||
@ -385,7 +396,7 @@ lgetc(int quotec)
|
||||
}
|
||||
|
||||
if (pushback_index)
|
||||
return (pushback_buffer[--pushback_index]);
|
||||
return ((unsigned char)pushback_buffer[--pushback_index]);
|
||||
|
||||
if (quotec) {
|
||||
if ((c = getc(file->stream)) == EOF) {
|
||||
@ -426,10 +437,10 @@ lungetc(int c)
|
||||
if (parseindex >= 0)
|
||||
return (c);
|
||||
}
|
||||
if (pushback_index < MAXPUSHBACK-1)
|
||||
return (pushback_buffer[pushback_index++] = c);
|
||||
else
|
||||
if (pushback_index + 1 >= MAXPUSHBACK)
|
||||
return (EOF);
|
||||
pushback_buffer[pushback_index++] = c;
|
||||
return (c);
|
||||
}
|
||||
|
||||
int
|
||||
@ -442,7 +453,7 @@ findeol(void)
|
||||
/* skip to either EOF or the first real EOL */
|
||||
while (1) {
|
||||
if (pushback_index)
|
||||
c = pushback_buffer[--pushback_index];
|
||||
c = (unsigned char)pushback_buffer[--pushback_index];
|
||||
else
|
||||
c = lgetc(0);
|
||||
if (c == '\n') {
|
||||
@ -516,7 +527,7 @@ yylex(void)
|
||||
if (c == '-' || isdigit(c)) {
|
||||
do {
|
||||
*p++ = c;
|
||||
if ((unsigned)(p-buf) >= sizeof(buf)) {
|
||||
if ((size_t)(p-buf) >= sizeof(buf)) {
|
||||
yyerror("string too long");
|
||||
return (findeol());
|
||||
}
|
||||
@ -539,8 +550,8 @@ yylex(void)
|
||||
} else {
|
||||
nodigits:
|
||||
while (p > buf + 1)
|
||||
lungetc(*--p);
|
||||
c = *--p;
|
||||
lungetc((unsigned char)*--p);
|
||||
c = (unsigned char)*--p;
|
||||
if (c == '-')
|
||||
return (c);
|
||||
}
|
||||
@ -555,7 +566,7 @@ nodigits:
|
||||
if (isalnum(c) || c == ':' || c == '_' || c == '*' || c == '/') {
|
||||
do {
|
||||
*p++ = c;
|
||||
if ((unsigned)(p-buf) >= sizeof(buf)) {
|
||||
if ((size_t)(p-buf) >= sizeof(buf)) {
|
||||
yyerror("string too long");
|
||||
return (findeol());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user