tin  2.4.4
About: TIN is a threaded NNTP and spool based UseNet newsreader.
  Fossies Dox: tin-2.4.4.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

memory.c
Go to the documentation of this file.
1 /*
2  * Project : tin - a Usenet reader
3  * Module : memory.c
4  * Author : I. Lea & R. Skrenta
5  * Created : 1991-04-01
6  * Updated : 2018-07-02
7  * Notes :
8  *
9  * Copyright (c) 1991-2020 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
10  * All rights reserved.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  *
16  * 1. Redistributions of source code must retain the above copyright notice,
17  * this list of conditions and the following disclaimer.
18  *
19  * 2. Redistributions in binary form must reproduce the above copyright
20  * notice, this list of conditions and the following disclaimer in the
21  * documentation and/or other materials provided with the distribution.
22  *
23  * 3. Neither the name of the copyright holder nor the names of its
24  * contributors may be used to endorse or promote products derived from
25  * this software without specific prior written permission.
26  *
27  * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
31  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37  * POSSIBILITY OF SUCH DAMAGE.
38  */
39 
40 
41 #ifndef TIN_H
42 # include "tin.h"
43 #endif /* !TIN_H */
44 
45 
46 /*
47  * Dynamic arrays maximum (initialized in init_alloc()) & current sizes
48  * num_* values are one past top of used part of array
49  */
51 int num_active = -1;
53 int num_newnews = 0;
54 int max_art;
57 int num_save = 0;
59 int num_scope = -1;
60 
61 /*
62  * Dynamic arrays
63  */
64 int *my_group; /* .newsrc --> active[] */
65 t_artnum *base; /* base articles for each thread */
66 struct t_group *active; /* active newsgroups */
67 struct t_scope *scopes = NULL; /* attributes stores in .tin/attributes */
68 struct t_newnews *newnews; /* active file sizes on different servers */
69 struct t_article *arts; /* articles headers in current group */
70 struct t_save *save; /* sorts articles before saving them */
71 
72 /*
73  * Local prototypes
74  */
75 static void free_active_arrays(void);
76 static void free_attributes(struct t_attribute *attributes);
77 static void free_scopes_arrays(void);
78 static void free_newnews_array(void);
79 static void free_if_not_default(char **attrib, char *deflt);
80 static void free_input_history(void);
81 
82 
83 /*
84  * Dynamic table management
85  * These settings are memory conservative: small initial allocations
86  * and a 50% expansion on table overflow. A fast vm system with
87  * much memory might want to start with higher initial allocations
88  * and a 100% expansion on overflow, especially for the arts[] array.
89  */
90 void
92  void)
93 {
94  /*
95  * active file arrays
96  */
99 
100  active = my_malloc(sizeof(*active) * max_active);
101  newnews = my_malloc(sizeof(*newnews) * max_newnews);
102  my_group = my_calloc(1, sizeof(int) * max_active);
103 
104  /*
105  * article headers array
106  */
109 
110  arts = my_calloc(1, sizeof(*arts) * max_art);
111  base = my_malloc(sizeof(t_artnum) * max_base);
112 
113  ofmt = my_calloc(1, sizeof(*ofmt) * 9); /* initial number of overview fields */
114 
115  /*
116  * save file array
117  */
119 
120  save = my_malloc(sizeof(*save) * max_save);
121 
122  /*
123  * scope array
124  */
126  expand_scope();
127 
128 #ifndef USE_CURSES
129  screen = (struct t_screen *) 0;
130 #endif /* !USE_CURSES */
131 }
132 
133 
134 void
136  void)
137 {
138  int i = max_art;
139 
140  max_art += max_art >> 1; /* increase by 50% */
141  arts = my_realloc(arts, sizeof(*arts) * max_art);
142  for (; i < max_art; i++) /* use memset() instead? */
143  arts[i].subject = arts[i].from = arts[i].xref = arts[i].path = arts[i].refs = arts[i].msgid = NULL;
144 }
145 
146 
147 void
149  void)
150 {
151  max_active += max_active >> 1; /* increase by 50% */
152  if (active == NULL) {
153  active = my_malloc(sizeof(*active) * max_active);
154  my_group = my_calloc(1, sizeof(int) * max_active);
155  } else {
156  active = my_realloc(active, sizeof(*active) * max_active);
157  my_group = my_realloc(my_group, sizeof(int) * max_active);
158  }
159 }
160 
161 
162 void
164  void)
165 {
166  max_base += max_base >> 1; /* increase by 50% */
167  base = my_realloc(base, sizeof(t_artnum) * max_base);
168 }
169 
170 
171 void
173  void)
174 {
175  max_save += max_save >> 1; /* increase by 50% */
176  save = my_realloc(save, sizeof(struct t_save) * max_save);
177 }
178 
179 
180 void
182  void)
183 {
184  if ((scopes == NULL) || (num_scope < 0)) {
185  if (scopes == NULL)
186  scopes = my_malloc(sizeof(*scopes) * max_scope);
187  num_scope = 0;
188  } else {
189  max_scope += max_scope >> 1; /* increase by 50% */
190  scopes = my_realloc(scopes, sizeof(*scopes) * max_scope);
191  }
192 }
193 
194 
195 void
197  void)
198 {
199  max_newnews += max_newnews >> 1; /* increase by 50% */
200  newnews = my_realloc(newnews, sizeof(struct t_newnews) * max_newnews);
201 }
202 
203 
204 #ifndef USE_CURSES
205 void
207  t_bool allocate)
208 {
209  int i;
210 
211  if (allocate) {
212  screen = my_malloc(sizeof(struct t_screen) * cLINES + 1);
213 
214  for (i = 0; i < cLINES; i++)
215 # if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
216  screen[i].col = my_malloc((size_t) (cCOLS * MB_CUR_MAX + 2));
217 # else
218  screen[i].col = my_malloc((size_t) (cCOLS + 2));
219 # endif /* MULTIBYTE_ABLE && !NO_LOCALE */
220  } else {
221  if (screen != NULL) {
222  for (i = 0; i < cLINES; i++)
223  FreeAndNull(screen[i].col);
224 
226  }
227  }
228 }
229 #endif /* !USE_CURSES */
230 
231 
232 void
234  void)
235 {
236  hash_reclaim();
237 
238 #ifndef USE_CURSES
239  if (!batch_mode)
241 #endif /* !USE_CURSES */
242 
243  free_art_array();
244  free_msgids();
245  FreeAndNull(arts);
249 
250 #ifdef HAVE_COLOR
251  FreeIfNeeded(quote_regex.re);
252  FreeIfNeeded(quote_regex.extra);
253  FreeIfNeeded(quote_regex2.re);
254  FreeIfNeeded(quote_regex2.extra);
255  FreeIfNeeded(quote_regex3.re);
256  FreeIfNeeded(quote_regex3.extra);
257  FreeIfNeeded(extquote_regex.re);
258  FreeIfNeeded(extquote_regex.extra);
259 #endif /* HAVE_COLOR */
288 
289  if (!batch_mode) {
290  free_keymaps();
292  }
293 
294  FreeAndNull(base);
295 
296  if (save != NULL) {
297  free_save_array();
298  FreeAndNull(save);
299  }
300 
301  if (newnews != NULL) {
304  }
305 
309 
310  if (ofmt) { /* ofmt might not be allocated yet on early abort */
311  int i;
312  for (i = 0; ofmt[i].name; i++)
313  free(ofmt[i].name);
314  free(ofmt);
315  }
316 
317  tin_fgets(NULL, FALSE);
318  rfc1522_decode(NULL);
319 
320  free(tin_progname);
321 }
322 
323 
324 void
326  void)
327 {
328  int i;
329 
330  for_each_art(i) {
331  arts[i].artnum = T_ARTNUM_CONST(0);
332  arts[i].date = (time_t) 0;
333  FreeAndNull(arts[i].xref);
334  FreeAndNull(arts[i].path);
335 
336  /*
337  * .refs & .msgid are usually free()d in build_references()
338  * nevertheless we try to free() it here in case tin_done()
339  * was called before build_references()
340  */
341  FreeAndNull(arts[i].refs);
342  FreeAndNull(arts[i].msgid);
343 
344  if (arts[i].archive) {
345  /* ->name is hashed */
346  FreeAndNull(arts[i].archive->partnum);
347  FreeAndNull(arts[i].archive);
348  }
349  arts[i].tagged = 0;
350  arts[i].thread = ART_EXPIRED;
351  arts[i].prev = ART_NORMAL;
352  arts[i].status = ART_UNREAD;
354  arts[i].selected = FALSE;
355  }
356 }
357 
358 
359 /*
360  * Use this only for attributes that have a fixed default of a static string
361  * in tinrc
362  */
363 static void
365  char **attrib,
366  char *deflt)
367 {
368  if (*attrib != deflt)
369  FreeAndNull(*attrib);
370 }
371 
372 
373 /*
374  * Free memory of one attributes struct only
375  */
376 static void
378  struct t_attribute *attributes)
379 {
384  FreeAndNull(attributes->fcc);
386  FreeAndNull(attributes->followup_to);
387 #ifdef HAVE_ISPELL
388  FreeAndNull(attributes->ispell);
389 #endif /* HAVE_ISPELL */
390  free_if_not_default(&attributes->maildir, tinrc.maildir);
391  FreeAndNull(attributes->mailing_list);
392  FreeAndNull(attributes->mime_types_to_save);
395  if (attributes->headers_to_display) {
396  if (attributes->headers_to_display->header)
397  FreeIfNeeded(*attributes->headers_to_display->header);
398  FreeAndNull(attributes->headers_to_display->header);
399  free(attributes->headers_to_display);
400  attributes->headers_to_display = (struct t_newsheader *) 0;
401  }
402  if (attributes->headers_to_not_display) {
403  if (attributes->headers_to_not_display->header)
406  free(attributes->headers_to_not_display);
407  attributes->headers_to_not_display = (struct t_newsheader *) 0;
408  }
411  FreeAndNull(attributes->quick_kill_scope);
412  FreeAndNull(attributes->quick_select_scope);
414  free_if_not_default(&attributes->savedir, tinrc.savedir);
415  FreeAndNull(attributes->savefile);
416  free_if_not_default(&attributes->sigfile, tinrc.sigfile);
417 #ifdef CHARSET_CONVERSION
418  FreeAndNull(attributes->undeclared_charset);
419 #endif /* CHARSET_CONVERSION */
420  FreeAndNull(attributes->x_headers);
421  FreeAndNull(attributes->x_body);
422 }
423 
424 
425 void
427  int num)
428 {
429  struct t_scope *scope;
430 
431  scope = &scopes[num];
432  FreeAndNull(scope->scope);
433  free_attributes(scope->attribute);
434  free(scope->attribute);
435  scope->attribute = (struct t_attribute *) 0;
436  free(scope->state);
437  scope->state = (struct t_attribute_state *) 0;
438 }
439 
440 
441 static void
443  void)
444 {
445  while (num_scope > 0)
448  num_scope = -1;
449 }
450 
451 
452 static void
454  void)
455 {
456  FreeAndNull(my_group); /* my_group[] */
457 
458  if (active != NULL) { /* active[] */
459  int i;
460 
461  for_each_group(i) {
462  FreeAndNull(active[i].name);
463  FreeAndNull(active[i].description);
464  FreeAndNull(active[i].aliasedto);
465  if (active[i].type == GROUP_TYPE_MAIL || active[i].type == GROUP_TYPE_SAVE) {
467  }
468  FreeAndNull(active[i].newsrc.xbitmap);
469  if (active[i].attribute && !active[i].attribute->global) {
470  free(active[i].attribute);
471  active[i].attribute = (struct t_attribute *) 0;
472  }
473  }
475  }
476  num_active = -1;
477 }
478 
479 
480 void
482  void)
483 {
484  int i;
485 
486  for (i = 0; i < num_save; i++) {
487  FreeAndNull(save[i].path);
488  /* file does NOT need to be freed */
489  save[i].file = NULL;
490  save[i].mailbox = FALSE;
491  }
492  num_save = 0;
493 }
494 
495 
496 static void
498  void)
499 {
500  int i;
501 
502  for (i = 0; i < num_newnews; i++)
503  FreeAndNull(newnews[i].host);
504 
505  num_newnews = 0;
506 }
507 
508 
509 static void
511  void)
512 {
513  int his_w, his_e;
514 
515  for (his_w = 0; his_w <= HIST_MAXNUM; his_w++) {
516  for (his_e = 0; his_e < HIST_SIZE; his_e++) {
517  FreeIfNeeded(input_history[his_w][his_e]);
518  }
519  }
520 }
521 
522 
523 void *
525  const char *file,
526  int line,
527  size_t size)
528 {
529  void *p;
530 
531 #ifdef DEBUG
532  debug_print_malloc(TRUE, file, line, size);
533 #endif /* DEBUG */
534 
535  if ((p = malloc(size)) == NULL) {
536  error_message(2, txt_out_of_memory, tin_progname, (unsigned long) size, file, line);
537  giveup();
538  }
539  return p;
540 }
541 
542 
543 /*
544  * TODO: add fallback code with malloc(nmemb*size);memset(0,nmemb*size)?
545  */
546 void *
548  const char *file,
549  int line,
550  size_t nmemb,
551  size_t size)
552 {
553  void *p;
554 
555 #ifdef DEBUG
556  debug_print_malloc(TRUE, file, line, nmemb * size);
557 #endif /* DEBUG */
558 
559  if ((p = calloc(nmemb, size)) == NULL) {
560  error_message(2, txt_out_of_memory, tin_progname, (unsigned long) (nmemb * size), file, line);
561  giveup();
562  }
563  return p;
564 }
565 
566 
567 void *
569  const char *file,
570  int line,
571  void *p,
572  size_t size)
573 {
574 #ifdef DEBUG
575  debug_print_malloc(FALSE, file, line, size);
576 #endif /* DEBUG */
577 
578  if (!size) {
579  if (p)
580  free(p);
581 
582  return NULL;
583  }
584 
585  if (p) {
586  void *q = realloc(p, size);
587 
588  if (q != NULL)
589  p = q;
590  else {
591  free(p);
592  p = NULL;
593  }
594  } else
595  p = malloc(size);
596 
597  if (p == NULL) {
598  error_message(2, txt_out_of_memory, tin_progname, (unsigned long) size, file, line);
599  giveup();
600  }
601  return p;
602 }
name
const char * name
Definition: signal.c:117
t_article
Definition: tin.h:1510
stars_regex
struct regex_cache stars_regex
t_capabilities::headers_range
char * headers_range
Definition: nntplib.h:196
t_attribute::news_quote_format
char * news_quote_format
Definition: tin.h:1584
my_realloc
#define my_realloc(ptr, size)
Definition: tin.h:2198
init_screen_array
void init_screen_array(t_bool allocate)
Definition: memory.c:206
my_malloc1
void * my_malloc1(const char *file, int line, size_t size)
Definition: memory.c:524
t_config::maildir
char maildir[PATH_LEN]
Definition: tinrc.h:94
free_attributes
static void free_attributes(struct t_attribute *attributes)
Definition: memory.c:377
url_regex
struct regex_cache url_regex
free_art_array
void free_art_array(void)
Definition: memory.c:325
num_save
int num_save
Definition: memory.c:57
hash_reclaim
void hash_reclaim(void)
Definition: hashstr.c:139
t_attribute::news_headers_to_display
char * news_headers_to_display
Definition: tin.h:1579
t_group
Definition: tin.h:1772
default_organization
char default_organization[PATH_LEN]
Definition: init.c:73
t_config::date_format
char date_format[LEN]
Definition: tinrc.h:275
verbatim_end_regex
struct regex_cache verbatim_end_regex
free_msgids
void free_msgids(void)
Definition: refs.c:554
cLINES
int cLINES
Definition: curses.c:52
my_group
int * my_group
Definition: memory.c:64
t_article::prev
int prev
Definition: tin.h:1527
ofmt
struct t_overview_fmt * ofmt
Definition: xref.c:53
t_article::selected
t_bool selected
Definition: tin.h:1533
t_attribute::mailing_list
char * mailing_list
Definition: tin.h:1578
t_overview_fmt::name
char * name
Definition: tin.h:2466
screen
struct t_screen * screen
Definition: screen.c:51
t_attribute::group_format
char * group_format
Definition: tin.h:1569
DEFAULT_SCOPE_NUM
#define DEFAULT_SCOPE_NUM
Definition: tin.h:617
glob_filter
struct t_filters glob_filter
Definition: filter.c:87
arts
struct t_article * arts
Definition: memory.c:69
underscores_regex
struct regex_cache underscores_regex
t_capabilities::headers_id
char * headers_id
Definition: nntplib.h:197
tinrc
struct t_config tinrc
Definition: init.c:191
FreeAndNull
#define FreeAndNull(p)
Definition: tin.h:2204
newnews
struct t_newnews * newnews
Definition: memory.c:68
save
struct t_save * save
Definition: memory.c:70
regex_cache::extra
pcre_extra * extra
Definition: tin.h:1919
ART_NOTKILLED
#define ART_NOTKILLED
Definition: tin.h:1328
t_newsheader::header
char ** header
Definition: tin.h:1557
GROUP_TYPE_MAIL
#define GROUP_TYPE_MAIL
Definition: tin.h:1058
num_scope
int num_scope
Definition: memory.c:59
free_scope
void free_scope(int num)
Definition: memory.c:426
t_config::thread_format
char thread_format[LEN]
Definition: tinrc.h:274
t_article::killed
unsigned int killed
Definition: tin.h:1530
t_attribute
Definition: tin.h:1564
tin.h
max_save
int max_save
Definition: memory.c:56
t_config::news_quote_format
char news_quote_format[LEN]
Definition: tinrc.h:109
t_save::file
char * file
Definition: tin.h:1924
tin_progname
char * tin_progname
Definition: init.c:105
t_attribute::savefile
char * savefile
Definition: tin.h:1567
free_save_array
void free_save_array(void)
Definition: memory.c:481
t_screen
Definition: tin.h:1929
tin_fgets
char * tin_fgets(FILE *fp, t_bool header)
Definition: read.c:320
free_newnews_array
static void free_newnews_array(void)
Definition: memory.c:497
t_attribute::maildir
char * maildir
Definition: tin.h:1565
t_newsheader::num
int num
Definition: tin.h:1558
free_keymaps
void free_keymaps(void)
Definition: keymap.c:230
t_attribute::fcc
char * fcc
Definition: tin.h:1574
ART_EXPIRED
#define ART_EXPIRED
Definition: tin.h:1310
t_attribute::organization
char * organization
Definition: tin.h:1573
GROUP_TYPE_SAVE
#define GROUP_TYPE_SAVE
Definition: tin.h:1060
t_attribute::thread_format
char * thread_format
Definition: tin.h:1570
t_attribute::x_headers
char * x_headers
Definition: tin.h:1581
txt_out_of_memory
constext txt_out_of_memory[]
Definition: lang.c:713
t_scope::state
struct t_attribute_state * state
Definition: tin.h:1753
strokes_regex
struct regex_cache strokes_regex
Definition: init.c:184
nntp_caps
struct t_capabilities nntp_caps
Definition: init.c:516
t_scope
Definition: tin.h:1750
rfc1522_decode
char * rfc1522_decode(const char *s)
Definition: rfc2047.c:232
giveup
void giveup(void)
Definition: main.c:1049
t_attribute::quick_select_scope
char * quick_select_scope
Definition: tin.h:1577
init_alloc
void init_alloc(void)
Definition: memory.c:91
t_scope::scope
char * scope
Definition: tin.h:1751
expand_newnews
void expand_newnews(void)
Definition: memory.c:196
expand_base
void expand_base(void)
Definition: memory.c:163
base
t_artnum * base
Definition: memory.c:65
uubegin_regex
struct regex_cache uubegin_regex
t_attribute::quote_chars
char * quote_chars
Definition: tin.h:1585
expand_art
void expand_art(void)
Definition: memory.c:135
FreeIfNeeded
#define FreeIfNeeded(p)
Definition: tin.h:2203
t_attribute::news_headers_to_not_display
char * news_headers_to_not_display
Definition: tin.h:1580
max_active
int max_active
Definition: memory.c:50
my_calloc1
void * my_calloc1(const char *file, int line, size_t nmemb, size_t size)
Definition: memory.c:547
t_attribute::savedir
char * savedir
Definition: tin.h:1566
t_attribute::x_body
char * x_body
Definition: tin.h:1582
active
struct t_group * active
Definition: memory.c:66
free_input_history
static void free_input_history(void)
Definition: memory.c:510
t_attribute::followup_to
char * followup_to
Definition: tin.h:1575
news_regex
struct regex_cache news_regex
cCOLS
int cCOLS
Definition: curses.c:53
t_config::news_headers_to_display
char news_headers_to_display[LEN]
Definition: tinrc.h:107
t_article::status
unsigned int status
Definition: tin.h:1529
T_ARTNUM_CONST
#define T_ARTNUM_CONST(v)
Definition: tin.h:229
t_article::tagged
int tagged
Definition: tin.h:1525
for_each_group
#define for_each_group(x)
Definition: tin.h:2210
max_base
int max_base
Definition: memory.c:55
shar_regex
struct regex_cache shar_regex
t_article::artnum
t_artnum artnum
Definition: tin.h:1511
my_realloc1
void * my_realloc1(const char *file, int line, void *p, size_t size)
Definition: memory.c:568
input_history
char * input_history[HIST_URL+1][15+1]
Definition: init.c:168
t_article::thread
int thread
Definition: tin.h:1526
DEFAULT_SAVE_NUM
#define DEFAULT_SAVE_NUM
Definition: tin.h:612
max_scope
int max_scope
Definition: memory.c:58
t_attribute::editor_format
char * editor_format
Definition: tin.h:1572
regex_cache::re
pcre * re
Definition: tin.h:1918
free_scopes_arrays
static void free_scopes_arrays(void)
Definition: memory.c:442
num_active
int num_active
Definition: memory.c:51
my_calloc
#define my_calloc(nmemb, size)
Definition: tin.h:2197
t_attribute::sigfile
char * sigfile
Definition: tin.h:1568
t_capabilities::implementation
char * implementation
Definition: nntplib.h:212
batch_mode
t_bool batch_mode
Definition: init.c:126
t_config::editor_format
char editor_format[PATH_LEN]
Definition: tinrc.h:68
slashes_regex
struct regex_cache slashes_regex
t_config::mail_address
char mail_address[HEADER_LEN]
Definition: tinrc.h:96
t_config::savedir
char savedir[PATH_LEN]
Definition: tinrc.h:126
t_config::news_headers_to_not_display
char news_headers_to_not_display[LEN]
Definition: tinrc.h:108
t_screen::col
char * col
Definition: tin.h:1930
DEFAULT_ACTIVE_NUM
#define DEFAULT_ACTIVE_NUM
Definition: tin.h:614
t_attribute_state
Definition: tin.h:1664
free_active_arrays
static void free_active_arrays(void)
Definition: memory.c:453
t_attribute::mime_types_to_save
char * mime_types_to_save
Definition: tin.h:1586
FALSE
#define FALSE
Definition: bool.h:70
t_newsheader
Definition: tin.h:1556
ART_UNREAD
#define ART_UNREAD
Definition: tin.h:1321
newsrc
char newsrc[PATH_LEN]
Definition: init.c:96
t_attribute::headers_to_not_display
struct t_newsheader * headers_to_not_display
Definition: tin.h:1595
t_attribute::date_format
char * date_format
Definition: tin.h:1571
t_attribute::quick_kill_scope
char * quick_kill_scope
Definition: tin.h:1576
free_all_arrays
void free_all_arrays(void)
Definition: memory.c:233
t_artnum
long t_artnum
Definition: tin.h:226
error_message
void error_message(unsigned int sdelay, const char *fmt,...)
Definition: screen.c:184
DEFAULT_ARTICLE_NUM
#define DEFAULT_ARTICLE_NUM
Definition: tin.h:611
verbatim_begin_regex
struct regex_cache verbatim_begin_regex
t_group::attribute
struct t_attribute * attribute
Definition: tin.h:1790
t_config::sigfile
char sigfile[PATH_LEN]
Definition: tinrc.h:121
mail_regex
struct regex_cache mail_regex
HIST_SIZE
#define HIST_SIZE
Definition: extern.h:1562
DEFAULT_NEWNEWS_NUM
#define DEFAULT_NEWNEWS_NUM
Definition: tin.h:615
spooldir
char spooldir[PATH_LEN]
Definition: init.c:102
t_config::quote_chars
char quote_chars[LEN]
Definition: tinrc.h:110
strip_was_regex
struct regex_cache strip_was_regex
HIST_MAXNUM
#define HIST_MAXNUM
Definition: extern.h:1560
expand_active
void expand_active(void)
Definition: memory.c:148
max_newnews
int max_newnews
Definition: memory.c:52
num_newnews
int num_newnews
Definition: memory.c:53
t_bool
unsigned t_bool
Definition: bool.h:77
t_attribute::from
char * from
Definition: tin.h:1583
free_if_not_default
static void free_if_not_default(char **attrib, char *deflt)
Definition: memory.c:364
expand_scope
void expand_scope(void)
Definition: memory.c:181
t_config::group_format
char group_format[LEN]
Definition: tinrc.h:273
t_save::mailbox
t_bool mailbox
Definition: tin.h:1925
TRUE
#define TRUE
Definition: bool.h:74
for_each_art
#define for_each_art(x)
Definition: tin.h:2211
max_art
int max_art
Definition: memory.c:54
t_attribute::headers_to_display
struct t_newsheader * headers_to_display
Definition: tin.h:1594
scopes
struct t_scope * scopes
Definition: memory.c:67
free_filter_array
void free_filter_array(struct t_filters *ptr)
Definition: filter.c:288
ART_NORMAL
#define ART_NORMAL
Definition: tin.h:1315
expand_save
void expand_save(void)
Definition: memory.c:172
strip_re_regex
struct regex_cache strip_re_regex
uubody_regex
struct regex_cache uubody_regex
t_save
Definition: tin.h:1922
t_article::date
time_t date
Definition: tin.h:1516
t_newnews
Definition: tin.h:1963
my_malloc
#define my_malloc(size)
Definition: tin.h:2196