xref: /netbsd-src/external/bsd/flex/dist/src/scanflags.c (revision 7977e68669c3b784eb65c933a2bd99785638ae00)
1 /*	$NetBSD: scanflags.c,v 1.3 2017/01/02 17:45:27 christos Exp $	*/
2 
3 /* scanflags - flags used by scanning. */
4 
5 /*  Copyright (c) 1990 The Regents of the University of California. */
6 /*  All rights reserved. */
7 
8 /*  This code is derived from software contributed to Berkeley by */
9 /*  Vern Paxson. */
10 
11 /*  The United States Government has rights in this work pursuant */
12 /*  to contract no. DE-AC03-76SF00098 between the United States */
13 /*  Department of Energy and the University of California. */
14 
15 /*  This file is part of flex. */
16 
17 /*  Redistribution and use in source and binary forms, with or without */
18 /*  modification, are permitted provided that the following conditions */
19 /*  are met: */
20 
21 /*  1. Redistributions of source code must retain the above copyright */
22 /*     notice, this list of conditions and the following disclaimer. */
23 /*  2. Redistributions in binary form must reproduce the above copyright */
24 /*     notice, this list of conditions and the following disclaimer in the */
25 /*     documentation and/or other materials provided with the distribution. */
26 
27 /*  Neither the name of the University nor the names of its contributors */
28 /*  may be used to endorse or promote products derived from this software */
29 /*  without specific prior written permission. */
30 
31 /*  THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */
32 /*  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */
33 /*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
34 /*  PURPOSE. */
35 #include "flexdef.h"
36 __RCSID("$NetBSD: scanflags.c,v 1.3 2017/01/02 17:45:27 christos Exp $");
37 
38 scanflags_t* _sf_stk = NULL;
39 size_t _sf_top_ix=0, _sf_max=0;
40 
41 void
sf_push(void)42 sf_push (void)
43 {
44     if (_sf_top_ix + 1 >= _sf_max) {
45         _sf_max += 32;
46         _sf_stk = realloc(_sf_stk, sizeof(scanflags_t) * _sf_max);
47     }
48 
49     // copy the top element
50     _sf_stk[_sf_top_ix + 1] = _sf_stk[_sf_top_ix];
51     ++_sf_top_ix;
52 }
53 
54 void
sf_pop(void)55 sf_pop (void)
56 {
57     assert(_sf_top_ix > 0);
58     --_sf_top_ix;
59 }
60 
61 /* one-time initialization. Should be called before any sf_ functions. */
62 void
sf_init(void)63 sf_init (void)
64 {
65     assert(_sf_stk == NULL);
66     _sf_max = 32;
67     _sf_stk = malloc(sizeof(scanflags_t) * _sf_max);
68     if (!_sf_stk)
69         lerr_fatal(_("Unable to allocate %zu of stack"), sizeof(scanflags_t));
70     _sf_stk[_sf_top_ix] = 0;
71 }
72 
73 /* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */
74