Compare commits
16 Commits
35b0da9202
...
d7c777b1a5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d7c777b1a5 | ||
|
|
b46a21f3c5 | ||
|
|
d86d3aa419 | ||
|
|
73cef0ffb0 | ||
|
|
9eb763ab87 | ||
|
|
481894147a | ||
|
|
4a6128d5e4 | ||
|
|
c55191fdc5 | ||
|
|
4e73ce533c | ||
|
|
7af3a7b8b6 | ||
|
|
496bcc879d | ||
|
|
5e5221d82d | ||
|
|
7c22b36a23 | ||
|
|
81a08ddb89 | ||
|
|
a9eeb04606 | ||
|
|
055b84f4d4 |
17
README
17
README
@@ -130,6 +130,23 @@ 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).
|
||||
|
||||
2023-10-20: Ninth public release 7.4 of portable cwm.
|
||||
|
||||
Changes made between OpenBSD 7.3 and 7.4:
|
||||
* Allow cwm(1) to cycle through windows of the same window class as
|
||||
the active window, default key binding to M-grave, respectively
|
||||
Alt-Tilde, like with other window managers.
|
||||
|
||||
--Leah Neukirchen <leah@vuxu.org>
|
||||
|
||||
|
||||
50
calmwm.h
50
calmwm.h
@@ -88,6 +88,7 @@ size_t strlcpy(char *, const char *, size_t);
|
||||
#define CWM_CYCLE_FORWARD 0x0001
|
||||
#define CWM_CYCLE_REVERSE 0x0002
|
||||
#define CWM_CYCLE_INGROUP 0x0004
|
||||
#define CWM_CYCLE_INCLASS 0x0008
|
||||
|
||||
enum cwm_status {
|
||||
CWM_QUIT,
|
||||
@@ -235,6 +236,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 +331,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 +535,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 +609,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 *);
|
||||
|
||||
|
||||
14
client.c
14
client.c
@@ -596,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
|
||||
@@ -849,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
|
||||
|
||||
9
conf.c
9
conf.c
@@ -136,9 +136,14 @@ static const struct {
|
||||
(CWM_CYCLE_FORWARD | CWM_CYCLE_INGROUP)) },
|
||||
{ FUNC_SC(window-rcycle-ingroup, client_cycle,
|
||||
(CWM_CYCLE_REVERSE | CWM_CYCLE_INGROUP)) },
|
||||
{ FUNC_SC(window-cycle-inclass, client_cycle,
|
||||
(CWM_CYCLE_FORWARD | CWM_CYCLE_INCLASS)) },
|
||||
{ FUNC_SC(window-rcycle-inclass, client_cycle,
|
||||
(CWM_CYCLE_REVERSE | CWM_CYCLE_INCLASS)) },
|
||||
|
||||
{ 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) },
|
||||
@@ -219,6 +224,8 @@ static const struct {
|
||||
{ "C-slash", "menu-cmd" },
|
||||
{ "M-Tab", "window-cycle" },
|
||||
{ "MS-Tab", "window-rcycle" },
|
||||
{ "M-grave", "window-cycle-inclass" },
|
||||
{ "MS-grave", "window-rcycle-inclass" },
|
||||
{ "CM-n", "window-menu-label" },
|
||||
{ "CM-x", "window-close" },
|
||||
{ "CM-a", "group-toggle-all" },
|
||||
@@ -669,6 +676,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;
|
||||
|
||||
4
cwm.1
4
cwm.1
@@ -102,6 +102,10 @@ Label current window.
|
||||
Cycle through currently visible windows.
|
||||
.It Ic MS-Tab
|
||||
Reverse cycle through currently visible windows.
|
||||
.It Ic M-grave
|
||||
Cycle through currently visible windows of the same window class.
|
||||
.It Ic MS-grave
|
||||
Reverse cycle through currently visible windows of the same window class.
|
||||
.It Ic CM-x
|
||||
Close current window.
|
||||
.It Ic CM-[n]
|
||||
|
||||
6
cwmrc.5
6
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
|
||||
@@ -293,6 +295,10 @@ Reverse cycle through windows.
|
||||
Forward cycle through windows in current group.
|
||||
.It window-rcycle-ingroup
|
||||
Reverse cycle through windows in current group.
|
||||
.It window-cycle-inclass
|
||||
Forward cycle through windows of the current window class.
|
||||
.It window-rcycle-inclass
|
||||
Reverse cycle through windows of the current window class.
|
||||
.It window-close
|
||||
Close current window.
|
||||
.It window-hide
|
||||
|
||||
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);
|
||||
|
||||
23
kbfunc.c
23
kbfunc.c
@@ -433,7 +433,9 @@ kbfunc_client_cycle(void *ctx, struct cargs *cargs)
|
||||
/* Only cycle visible and non-ignored windows. */
|
||||
if ((newcc->flags & (CLIENT_SKIP_CYCLE)) ||
|
||||
((flags & CWM_CYCLE_INGROUP) &&
|
||||
(newcc->gc != oldcc->gc)))
|
||||
(newcc->gc != oldcc->gc)) ||
|
||||
((flags & CWM_CYCLE_INCLASS) &&
|
||||
strcmp(newcc->res_class, oldcc->res_class) != 0))
|
||||
again = 1;
|
||||
|
||||
/* Is oldcc the only non-hidden window? */
|
||||
@@ -453,7 +455,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 +492,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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user