version 1.23, 2019/07/19 20:27:25 |
version 1.26, 2020/01/19 18:02:00 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2015, 2016, 2018, 2019 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2015,2016,2018,2019,2020 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 53 static struct tag_files tag_files; |
|
Line 53 static struct tag_files tag_files; |
|
* but for simplicity, create it anyway. |
* but for simplicity, create it anyway. |
*/ |
*/ |
struct tag_files * |
struct tag_files * |
tag_init(void) |
tag_init(char *tagname) |
{ |
{ |
struct sigaction sa; |
struct sigaction sa; |
int ofd; |
int ofd; |
|
|
ofd = -1; |
ofd = -1; |
tag_files.tfd = -1; |
tag_files.tfd = -1; |
tag_files.tcpgid = -1; |
tag_files.tcpgid = -1; |
|
tag_files.tagname = tagname; |
|
|
/* Clean up when dying from a signal. */ |
/* Clean up when dying from a signal. */ |
|
|
|
|
*tag_files.tfn = '\0'; |
*tag_files.tfn = '\0'; |
tag_files.ofd = -1; |
tag_files.ofd = -1; |
tag_files.tfd = -1; |
tag_files.tfd = -1; |
|
tag_files.tagname = NULL; |
return NULL; |
return NULL; |
} |
} |
|
|
Line 151 tag_put(const char *s, int prio, size_t line) |
|
Line 153 tag_put(const char *s, int prio, size_t line) |
|
s += 2; |
s += 2; |
|
|
/* |
/* |
* Skip whitespace and whatever follows it, |
* Skip whitespace and escapes and whatever follows, |
* and if there is any, downgrade the priority. |
* and if there is any, downgrade the priority. |
*/ |
*/ |
|
|
len = strcspn(s, " \t"); |
len = strcspn(s, " \t\\"); |
if (len == 0) |
if (len == 0) |
return; |
return; |
|
|
Line 194 tag_put(const char *s, int prio, size_t line) |
|
Line 196 tag_put(const char *s, int prio, size_t line) |
|
|
|
/* A better entry is already present, ignore the new one. */ |
/* A better entry is already present, ignore the new one. */ |
|
|
if (entry->prio > 0 && entry->prio < prio) |
if (entry->prio != -1 && entry->prio < prio) |
return; |
return; |
|
|
/* The existing entry is worse, clear it. */ |
/* The existing entry is worse, clear it. */ |
|
|
if (entry->prio < 1 || entry->prio > prio) |
if (entry->prio == -1 || entry->prio == 0 || |
|
entry->prio > prio) |
entry->nlines = 0; |
entry->nlines = 0; |
} |
} |
|
|
|
|
empty = 1; |
empty = 1; |
entry = ohash_first(&tag_data, &slot); |
entry = ohash_first(&tag_data, &slot); |
while (entry != NULL) { |
while (entry != NULL) { |
if (stream != NULL && entry->prio >= 0) { |
if (stream != NULL && entry->prio != -1) { |
for (i = 0; i < entry->nlines; i++) { |
for (i = 0; i < entry->nlines; i++) { |
fprintf(stream, "%s %s %zu\n", |
fprintf(stream, "%s %s %zu\n", |
entry->s, tag_files.ofn, entry->lines[i]); |
entry->s, tag_files.ofn, entry->lines[i]); |