3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * A really poor man's queue. It does only what it has to and gets out of 29 * Dodge. It is used in place of <sys/queue.h> to get a better performance. 30 */ 31 32#include <sys/cdefs.h>
| 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * A really poor man's queue. It does only what it has to and gets out of 29 * Dodge. It is used in place of <sys/queue.h> to get a better performance. 30 */ 31 32#include <sys/cdefs.h>
|
34 35#include <sys/param.h> 36#include <sys/queue.h> 37 38#include <stdlib.h> 39#include <string.h> 40 41#include "grep.h" 42 43struct qentry { 44 STAILQ_ENTRY(qentry) list; 45 struct str data; 46}; 47 48static STAILQ_HEAD(, qentry) queue = STAILQ_HEAD_INITIALIZER(queue); 49static unsigned long long count; 50 51static struct qentry *dequeue(void); 52 53void 54enqueue(struct str *x) 55{ 56 struct qentry *item; 57 58 item = grep_malloc(sizeof(struct qentry)); 59 item->data.dat = grep_malloc(sizeof(char) * x->len); 60 item->data.len = x->len; 61 item->data.line_no = x->line_no; 62 item->data.off = x->off; 63 memcpy(item->data.dat, x->dat, x->len); 64 item->data.file = x->file; 65 66 STAILQ_INSERT_TAIL(&queue, item, list); 67 68 if (++count > Bflag) 69 free(dequeue()); 70} 71 72static struct qentry * 73dequeue(void) 74{ 75 struct qentry *item; 76 77 item = STAILQ_FIRST(&queue); 78 if (item == NULL) 79 return (NULL); 80 81 STAILQ_REMOVE_HEAD(&queue, list); 82 --count; 83 return (item); 84} 85 86void 87printqueue(void) 88{ 89 struct qentry *item; 90 91 while ((item = dequeue()) != NULL) { 92 printline(&item->data, '-', (regmatch_t *)NULL, 0); 93 free(item); 94 } 95} 96 97void 98clearqueue(void) 99{ 100 struct qentry *item; 101 102 while ((item = dequeue()) != NULL) 103 free(item); 104}
| 34 35#include <sys/param.h> 36#include <sys/queue.h> 37 38#include <stdlib.h> 39#include <string.h> 40 41#include "grep.h" 42 43struct qentry { 44 STAILQ_ENTRY(qentry) list; 45 struct str data; 46}; 47 48static STAILQ_HEAD(, qentry) queue = STAILQ_HEAD_INITIALIZER(queue); 49static unsigned long long count; 50 51static struct qentry *dequeue(void); 52 53void 54enqueue(struct str *x) 55{ 56 struct qentry *item; 57 58 item = grep_malloc(sizeof(struct qentry)); 59 item->data.dat = grep_malloc(sizeof(char) * x->len); 60 item->data.len = x->len; 61 item->data.line_no = x->line_no; 62 item->data.off = x->off; 63 memcpy(item->data.dat, x->dat, x->len); 64 item->data.file = x->file; 65 66 STAILQ_INSERT_TAIL(&queue, item, list); 67 68 if (++count > Bflag) 69 free(dequeue()); 70} 71 72static struct qentry * 73dequeue(void) 74{ 75 struct qentry *item; 76 77 item = STAILQ_FIRST(&queue); 78 if (item == NULL) 79 return (NULL); 80 81 STAILQ_REMOVE_HEAD(&queue, list); 82 --count; 83 return (item); 84} 85 86void 87printqueue(void) 88{ 89 struct qentry *item; 90 91 while ((item = dequeue()) != NULL) { 92 printline(&item->data, '-', (regmatch_t *)NULL, 0); 93 free(item); 94 } 95} 96 97void 98clearqueue(void) 99{ 100 struct qentry *item; 101 102 while ((item = dequeue()) != NULL) 103 free(item); 104}
|