1 /*:ts=8*/ 2 /***************************************************************************** 3 * FIDOGATE --- Gateway UNIX Mail/News <-> FTN NetMail/EchoMail 4 * 5 * 6 * Prototypes for functions in libfidogate.a 7 * 8 ***************************************************************************** 9 * Copyright (C) 1990-2002 10 * _____ _____ 11 * | |___ | Martin Junius <mj@fidogate.org> 12 * | | | | | | Radiumstr. 18 13 * |_|_|_|@home| D-51069 Koeln, Germany 14 * 15 * This file is part of FIDOGATE. 16 * 17 * FIDOGATE is free software; you can redistribute it and/or modify it 18 * under the terms of the GNU General Public License as published by the 19 * Free Software Foundation; either version 2, or (at your option) any 20 * later version. 21 * 22 * FIDOGATE is distributed in the hope that it will be useful, but 23 * WITHOUT ANY WARRANTY; without even the implied warranty of 24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 25 * General Public License for more details. 26 * 27 * You should have received a copy of the GNU General Public License 28 * along with FIDOGATE; see the file COPYING. If not, write to the Free 29 * Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 30 *****************************************************************************/ 31 #ifndef FIDOGATE_PROTOTYPES_H 32 #define FIDOGATE_PROTOTYPES_H 33 34 #include "structs.h" 35 #include "node.h" 36 #include "packet.h" 37 #include <stdio.h> 38 /* Should it be checked by configure ? */ 39 #include <sys/stat.h> 40 41 /* define __attribute__ to nothing for non GNU */ 42 #ifndef __GNUC__ 43 #define __attribute__(x) /*nothing */ 44 #endif 45 46 /* acl.c */ 47 #define acl_init() acl_do_file( cf_p_acl() ) 48 void acl_do_file(char *); 49 void acl_ngrp(RFCAddr, int); 50 int acl_ngrp_lookup(char *); 51 int pna_notify(char *); 52 int ftnacl_lookup(Node *, Node *, char *); 53 void acl_ftn_free(void); 54 void acl_free(void); 55 void acl_ngrp_free(void); 56 57 /* acl_ftn.c */ 58 #ifdef FTN_ACL 59 #define TYPE_MANDATORY 'm' 60 #define TYPE_READONLY 'r' 61 #define ftnacl_init() ftnacl_do_file( cf_p_ftnacl() ) 62 #define ftnacl_ismandatory(a, b, c) ftnacl_search(a, b, TYPE_MANDATORY, c) 63 #define ftnacl_isreadonly(a, b, c) ftnacl_search(a, b, TYPE_READONLY, c) 64 void ftnacl_do_file(char *); 65 int ftnacl_search(Node *, char *, char, char); 66 #endif /* FTN_ACL */ 67 68 /* active.c */ 69 #ifdef ACTIVE_LOOKUP 70 #ifndef SN 71 short active_init(void); 72 #endif 73 Active *active_lookup(char *); 74 #endif /* ACTIVE_LOOKUP */ 75 76 /* address.c */ 77 #define ADDRESS_ERROR_SIZE 256 78 extern char address_error[ADDRESS_ERROR_SIZE]; 79 80 char *str_ftn_to_inet(char *, size_t, Node *, int); 81 char *s_ftn_to_inet(Node *); 82 Node *inet_to_ftn(char *); 83 int addr_is_local(char *); 84 int addr_is_domain(char *); 85 int addr_is_local_xpost(char *); 86 void addr_is_local_xpost_init(char *); 87 #ifdef AI_1 88 int verify_host_flag(Node *); 89 #endif 90 91 /* aliases.c */ 92 #define alias_init() alias_do_file( cf_p_aliases() ) 93 void alias_do_file(char *); 94 Alias *alias_lookup(Node *, char *); 95 Alias *alias_lookup_strict(Node *, char *); 96 Alias *alias_lookup_userdom(RFCAddr *); 97 void alias_free(void); 98 99 /* uplinks.c */ 100 void uplinks_init(void); 101 AreaUplink *uplinks_lookup(int, char *); 102 void uplinks_lookup_free(void); 103 AreaUplink *uplinks_line_get(int, Node *); 104 AreaUplink *uplinks_first(void); 105 void uplinks_free(void); 106 107 /* areas.c */ 108 void areas_maxmsgsize(long); 109 long areas_get_maxmsgsize(void); 110 void areas_limitmsgsize(long); 111 long areas_get_limitmsgsize(void); 112 void areas_init(void); 113 Area *areas_parse_line(char *); 114 Area *areas_lookup(char *, char *, Node *); 115 void areas_free(void); 116 117 118 /* areasbbs.c */ 119 int areasbbs_rewrite(void); 120 void areasbbs_changed(void); 121 void areasbbs_not_changed(void); 122 void areasbbs_remove(AreasBBS *, AreasBBS *); 123 void areasbbs_remove1(AreasBBS *); 124 AreasBBS *areasbbs_new(void); 125 int areasbbs_init(char *); 126 int areasbbs_print(FILE *); 127 AreasBBS *areasbbs_first(void); 128 AreasBBS *areasbbs_lookup(char *); 129 void areasbbs_add(AreasBBS * p); 130 int areasbbs_isstate(char *, char); 131 int areasbbs_chstate(char **, char *, char); 132 void areasbbs_free(void); 133 134 /* binkley.c */ 135 #define NOWAIT 0 136 #define WAIT 1 137 138 #define CHECK_FILE 0 139 #define CHECK_DIR 1 140 141 char *flav_to_asc(int); 142 //int asc_to_flav (char *); 143 char *bink_out_name(Node *); 144 char *bink_bsy_name(Node *); 145 int bink_bsy_test(Node *); 146 int bink_bsy_create(Node *, int); 147 int bink_bsy_delete(Node *); 148 char *bink_find_flo(Node *, char *); 149 char *bink_find_out(Node *, char *); 150 int bink_attach(Node *, int, char *, char *, int); 151 int check_access(char *, int); 152 int bink_mkdir(Node *); 153 long check_size(char *); 154 int check_old(char *, time_t dt); 155 156 /* bounce.c */ 157 void bounce_set_cc(char *); 158 int print_file_subst(FILE *, FILE *, Message *, char *, Textlist *, RFCHeader *); 159 int bounce_header(char *); 160 void bounce_mail(char *, RFCAddr *, Message *, char *, Textlist *, RFCHeader *); 161 162 /* charset.c */ 163 CharsetTable *charset_table_new(void); 164 CharsetAlias *charset_alias_new(void); 165 int charset_write_bin(char *); 166 int charset_read_bin(char *); 167 char *charset_map_c(int, int); 168 char *xlat_s(char *, char *); 169 int charset_recode_buf(char **, size_t *, char *, size_t, char *, char *); 170 char *charset_alias_fsc(char *); 171 char *charset_alias_rfc(char *); 172 void charset_set_in_out(char *, char *); 173 void charset_init(void); 174 char *charset_chrs_name(char *); 175 void charset_free(void); 176 int charset_is_7bit(char *buffer, size_t len); 177 bool charset_is_valid_utf8(char *, size_t); 178 char *charset_fsc_canonize(char *); 179 char *charset_name_rfc2ftn(char *); 180 181 /* config.c */ 182 void cf_i_am_a_gateway_prog(void); 183 void cf_check_gate(void); 184 void cf_debug(void); 185 Node *cf_main_addr(void); 186 Node cf_n_main_addr(void); 187 Node *cf_addr(void); 188 Node *cf_uplink(void); 189 Node cf_n_addr(void); 190 Node cf_n_uplink(void); 191 void cf_set_curr(Node *); 192 void cf_set_zone(int); 193 void cf_set_best(int, int, int); 194 int cf_zone(); 195 int cf_defzone(); 196 long cf_lineno_get(void); 197 long cf_lineno_set(long n); 198 char *cf_getline(char *, int, FILE *); 199 void cf_read_config_file(char *); 200 void cf_initialize(void); 201 void cf_set_addr(char *); 202 void cf_set_uplink(char *); 203 char *cf_hostname(void); 204 char *cf_domainname(void); 205 char *cf_hostsdomain(void); 206 char *cf_fqdn(void); 207 char *cf_zones_inet_domain(int); 208 int cf_zones_check(int); 209 char *cf_zones_trav(int); 210 char *cf_zones_out(int); 211 char *cf_out_get(short int); 212 char *cf_zones_ftn_domain(int); 213 Node *cf_addr_trav(int); 214 int cf_dos(void); 215 char *cf_dos_xlate(char *); 216 char *cf_unix_xlate(char *); 217 Node cf_gateway(void); 218 char *cf_get_string(char *, int); 219 char *cf_p_organization(void); 220 char *cf_p_origin(void); 221 cflist *config_first(void); 222 void config_free(void); 223 224 /* crc16.c */ 225 void crc16_init(void); 226 void crc16_update(int); 227 void crc16_update_ccitt(int); 228 unsigned int crc16_value(void); 229 unsigned int crc16_value_ccitt(void); 230 231 /* crc32.c */ 232 unsigned long compute_crc32(unsigned char *, int); 233 void crc32_init(void); 234 void crc32_compute(unsigned char *, int); 235 void crc32_update(int); 236 unsigned long crc32_value(void); 237 unsigned long crc32_file(char *); 238 239 /* date.c */ 240 char *date(char *, time_t *); 241 char *date_buf(char *, size_t, char *, time_t *, long); 242 char *date_tz(char *, time_t *, char *); 243 char *date_rfc_tz(char *); 244 time_t date_tz_str_to_time(char *); 245 246 247 /* dir.c */ 248 #define DIR_SORTNAME 'n' 249 #define DIR_SORTNAMEI 'i' 250 #define DIR_SORTSIZE 's' 251 #define DIR_SORTMTIME 'm' 252 #define DIR_SORTNONE '-' 253 254 int dir_open(char *, char *, int); 255 void dir_close(void); 256 void dir_sortmode(int); 257 char *dir_get(int); 258 char *dir_get_mtime(time_t, char); 259 char *dir_search(char *, char *); 260 int mkdir_r(char *, mode_t); 261 262 /* file.c */ 263 void rename_bad(char *); 264 265 /* flo.c */ 266 FILE *flo_file(void); 267 int flo_open(Node *, int); 268 int flo_openx(Node *, int, char *, int); 269 char *flo_gets(char *, size_t); 270 int flo_close(Node *, int, int); 271 void flo_mark(void); 272 273 /* fopen.c */ 274 FILE *fopen_expand_name(char *, char *, int); 275 FILE *xfopen(char *, char *); 276 277 /* ftnaddr.c */ 278 void ftnaddr_init(FTNAddr *); 279 void ftnaddr_invalid(FTNAddr *); 280 FTNAddr ftnaddr_parse(char *); 281 char *s_ftnaddr_print(FTNAddr *); 282 283 /* getdate.y */ 284 time_t get_date(char *, void *); 285 286 /* gettime.c / parsedate.y */ 287 extern time_t parsedate(char *, TIMEINFO *); 288 extern void GetTimeInfo(TIMEINFO *); 289 290 /* histdb.c */ 291 short int hi_init_dbc(void); 292 void hi_init_history(void); 293 void hi_init_tic_history(void); 294 void hi_close(void); 295 short int hi_write_dbc(char *, char *, short int); 296 short int hi_write_t(time_t, time_t, char *); 297 short int hi_write(time_t, char *); 298 short int hi_test(char *); 299 short int hi_write_avail(char *area, char *desc); 300 char *hi_fetch(char *, int); 301 302 /* hosts.c */ 303 void hosts_init(void); 304 Host *hosts_lookup(Node *, char *); 305 void hosts_free(void); 306 307 /* kludge.c */ 308 void kludge_pt_intl(MsgBody *, Message *, short int); 309 char *kludge_get(Textlist *, char *, Textline **); 310 311 /* lock.c */ 312 int lock_fd(int); 313 int unlock_fd(int); 314 int lock_file(FILE *); 315 int unlock_file(FILE *); 316 #ifdef NFS_SAFE_LOCK_FILES 317 int lock_lockfile_nfs(char *, int, char *); 318 int unlock_lockfile_nfs(char *); 319 #else 320 int lock_lockfile(char *, int); 321 int unlock_lockfile(char *); 322 #endif 323 int lock_program(char *, int); 324 int unlock_program(char *); 325 int lock_path(char *, int); 326 void unlock_path(char *); 327 328 /* log.c */ 329 extern int verbose; 330 331 char *strerror(int); 332 void fglog(const char *, ...) 333 __attribute__((format(printf, 1, 2))); 334 void debug(int, const char *, ...) 335 __attribute__((format(printf, 2, 3))); 336 void log_file(char *); 337 void log_program(char *); 338 339 /* mail.c */ 340 extern char mail_dir[MAXPATH]; 341 extern char news_dir[MAXPATH]; 342 343 int mail_open(int); 344 FILE *mail_file(int); 345 void mail_close(int); 346 347 /* message.c */ 348 int pkt_get_line(FILE *, char *, int); 349 int pkt_get_body(FILE *, Textlist *); 350 void msg_body_init(MsgBody *); 351 void msg_body_clear(MsgBody *); 352 int is_blank_line(char *); 353 short int pkt_get_body_parse(FILE *, MsgBody *, Node *, Node *); 354 int msg_body_parse(Textlist *, MsgBody *); 355 int msg_put_msgbody(FILE *, MsgBody *); 356 int msg_put_line(FILE *, char *); 357 char *msg_xlate_line(char *, int, char *, int); 358 int msg_parse_origin(char *, Node *); 359 int msg_parse_msgid(char *, Node *); 360 361 /* mime.c */ 362 enum mime_encodings { 363 MIME_7BIT = 0, 364 MIME_8BIT, 365 MIME_QP, 366 MIME_B64, 367 }; 368 #define MIME_DEFAULT MIME_B64 369 #define MIME_STRING_LIMIT 76 370 371 char *mime_dequote(char *, size_t, char *); 372 char *mime_header_dec(char *, size_t, char *, char *, char *, RFCHeader *); 373 Textlist *mime_body_dec(Textlist *, RFCHeader *, char *, char *); 374 int mime_header_enc(char **, char *, char *, int); 375 void mime_b64_encode_tl(Textlist * in, Textlist * out); 376 void mime_qp_encode_tl(Textlist * in, Textlist * out); 377 378 /* misc.c */ 379 char *str_change_ext(char *, size_t, char *, char *); 380 void str_printf(char *, size_t, const char *, ...) 381 __attribute__((format(printf, 3, 4))); 382 int str_last(char *, size_t); 383 char *str_lower(char *); 384 char *str_upper(char *); 385 char *str_copy(char *, size_t, char *); 386 char *str_append(char *, size_t, char *); 387 char *str_append2(char *, size_t, char *, char *); 388 char *str_copy2(char *, size_t, char *, char *); 389 char *str_copy3(char *, size_t, char *, char *, char *); 390 char *str_copy4(char *, size_t, char *, char *, char *, char *); 391 char *str_copy5(char *, size_t, char *, char *, char *, char *, char *); 392 393 #define BUF_LAST(d) str_last (d,sizeof(d)) 394 #define BUF_COPY(d,s) str_copy (d,sizeof(d),s) 395 #define BUF_APPEND(d,s) str_append(d,sizeof(d),s) 396 #define BUF_APPEND2(d,s1,s2) str_append2(d,sizeof(d),s1,s2) 397 #define BUF_COPY2(d,s1,s2) str_copy2 (d,sizeof(d),s1,s2) 398 #define BUF_COPY3(d,s1,s2,s3) str_copy3 (d,sizeof(d),s1,s2,s3) 399 #define BUF_COPY4(d,s1,s2,s3,s4) str_copy4 (d,sizeof(d),s1,s2,s3,s4) 400 #define BUF_COPY5(d,s1,s2,s3,s4,s5) str_copy5 (d,sizeof(d),s1,s2,s3,s4,s5) 401 402 int strlen_zero(char *); 403 char *str_copy_range(char *, size_t, char *, char *); 404 #ifdef HAVE_STRCASECMP 405 #ifndef HAVE_STRICMP 406 #define stricmp strcasecmp 407 #define strnicmp strncasecmp 408 #endif 409 #endif 410 #if !defined(HAVE_STRCASECMP) && !defined(HAVE_STRICMP) 411 int strnicmp(char *, char *, int); 412 int stricmp(char *, char *); 413 #endif 414 415 #define streq(a,b) (strcmp ((a),(b)) == 0) 416 #define strieq(a,b) (stricmp ((a),(b)) == 0) 417 #define strneq(a,b,n) (strncmp ((a),(b),(n)) == 0) 418 #define strnieq(a,b,n) (strnicmp((a),(b),(n)) == 0) 419 420 long xtol(char *); 421 void strip_crlf(char *); 422 char *strip_space(char *); 423 int is_space(int); 424 int atooct(char *); 425 int is_blank(int); 426 int is_digit(int); 427 int is_xdigit(int); 428 int is_odigit(int); 429 char *str_expand_name(char *, size_t, char *); 430 431 #define BUF_EXPAND(d,s) str_expand_name(d,sizeof(d),s) 432 433 char *str_dosify(char *); 434 #ifdef DO_DOSIFY /* MSDOS, OS2 */ 435 #define DOSIFY_IF_NEEDED(s) str_dosify(s); 436 #else /* UNIX */ 437 #define DOSIFY_IF_NEEDED(s) 438 #endif 439 int run_system(char *); 440 441 int xfeof(FILE *); 442 443 void list_init(char ***, char *); 444 int list_match(char **, char **); 445 void list_free(char **); 446 447 /* msgid.c */ 448 char *s_msgid_fido_to_rfc(char *, int *, short, char *); 449 char *s_msgid_default(Message *); 450 char *s_msgid_rfc_to_fido(int *, char *, int, int, char *, short int, int); 451 char *s_msgid_convert_origid(char *); 452 453 /* node.c */ 454 int pfnz_to_node(char *, Node *); 455 int asc_to_node(char *, Node *, int); 456 char *node_to_pfnz(Node *); 457 int node_eq(Node *, Node *); 458 int node_np_eq(Node *, Node *); 459 void node_clear(Node *); 460 void node_invalid(Node *); 461 int asc_to_node_diff(char *, Node *, Node *); 462 #ifdef FTN_ACL 463 int asc_to_node_diff_acl(char *, Node *, Node *); 464 #endif /* FTN_ACL */ 465 char *node_to_asc_diff(Node *, Node *); 466 #ifdef FTN_ACL 467 char *node_to_asc_diff_acl(Node *, Node *); 468 #endif /* FTN_ACL */ 469 int node_cmp(Node *, Node *); 470 471 void lon_init(LON *); 472 void lon_delete(LON *); 473 void lon_add(LON *, Node *); 474 void lon_remove(LON *, Node *); 475 int lon_search(LON *, Node *); 476 int lon_search_wild(LON *, Node *); 477 short int lon_one_link(LON *); 478 #ifdef FTN_ACL 479 int lon_search_acl(LON *, Node *); 480 #endif /* FTN_ACL */ 481 int lon_is_uplink(LON *, int, Node *); 482 Node *lon_search_node(LON *, Node *); 483 void lon_add_string(LON *, char *); 484 void lon_print(LON *, FILE *, char); 485 void lon_sort(LON *, short); 486 void lon_print_sorted(LON *, FILE *, int); 487 #ifdef FTN_ACL 488 //int lon_print_acl (LON *, FILE *); 489 #endif /* FTN_ACL */ 490 int lon_print_passive(LON *, FILE *); 491 void lon_debug(char, char *, LON *, char); 492 void lon_join(LON *, LON *); 493 494 /* outpkt.c */ 495 char *outpkt_outputname(char *, char *, int, int, int, long, char *); 496 long outpkt_sequencer(void); 497 void outpkt_set_maxopen(int); 498 FILE *outpkt_open(Node *, Node *, int, int, int, int); 499 void outpkt_close(void); 500 int outpkt_netmail(Message *, Textlist *, char *, char *, char *); 501 void send_request(Textlist *); 502 503 /* packet.c */ 504 void pkt_outdir(char *, char *); 505 char *pkt_get_outdir(void); 506 void pkt_baddir(char *, char *); 507 char *pkt_get_baddir(void); 508 FILE *pkt_open(char *, Node *, char *, int); 509 int pkt_close(void); 510 char *pkt_name(void); 511 char *pkt_tmpname(void); 512 int pkt_isopen(void); 513 514 size_t pkt_get_string(FILE *, char *, size_t); 515 time_t pkt_get_date(FILE *); 516 int pkt_get_msg_hdr(FILE *, Message *, bool); 517 void pkt_debug_msg_hdr(FILE *, Message *, char *); 518 void pkt_put_string(FILE *, char *); 519 void pkt_put_line(FILE *, char *); 520 void pkt_put_int16(FILE *, int); 521 void pkt_put_date(FILE *, time_t, char *); 522 int pkt_put_msg_hdr(FILE *, Message *, int); 523 long pkt_get_int16(FILE *); 524 int pkt_get_nbytes(FILE *, char *, int); 525 int pkt_get_hdr(FILE *, Packet *); 526 void pkt_debug_hdr(FILE *, Packet *, char *); 527 int pkt_put_string_padded(FILE *, char *, int); 528 int pkt_put_hdr(FILE *, Packet *); 529 int pkt_put_hdr_raw(FILE *, Packet *); 530 void pkt_fill_hdr(Packet *); 531 532 /* parsenode.c */ 533 int znfp_get_number(char **); 534 int znfp_parse_partial(char *, Node *); 535 int znfp_parse_diff(char *, Node *, Node *); 536 char *znfp_put_number(int, int); 537 char *s_znfp_print(Node *, int); 538 char *str_znfp_print(char *, size_t, Node *, int, int, int); 539 char *s_znfp(Node *); 540 char *znfp1(Node *); 541 char *znfp2(Node *); 542 char *znfp3(Node *); 543 char *znf1(Node *); 544 char *znf2(Node *); 545 char *nf1(Node *); 546 int wild_compare_node(Node *, Node *); 547 /* passwd.c */ 548 void passwd_init(void); 549 Passwd *passwd_lookup(char *, Node *); 550 void passwd_free(void); 551 552 /* read.c */ 553 char *read_line(char *, int, FILE *); 554 long read_rnews_size(FILE *); 555 556 /* rematch.c */ 557 #ifdef HAS_POSIX_REGEX 558 int regex_match(const char *); 559 char *str_regex_match_sub(char *, size_t, int, const char *); 560 void regex_init(void); 561 void regex_free(void); 562 #endif 563 564 /* rfcaddr.c */ 565 void rfcaddr_dot_names(void); 566 void rfcaddr_mode(int); 567 RFCAddr rfcaddr_from_ftn(char *, Node *); 568 RFCAddr rfcaddr_from_rfc(char *); 569 char *s_rfcaddr_to_asc(RFCAddr *, int); 570 void rfcaddr_fallback_username(char *); 571 572 /* rfcheader.c */ 573 int header_alter(RFCHeader *, char *, char *); 574 void header_ca_rfc(RFCHeader *, FILE *, int); 575 void header_free(RFCHeader *); 576 int header_delete_from_body(Textlist *); 577 RFCHeader *header_read(FILE *); 578 RFCHeader *header_read_list(Textlist *); 579 int header_hops(RFCHeader *); 580 char *header_get(RFCHeader *, char *); 581 /* keep for legacy ftn2rfc */ 582 char *rfcheader_get(Textlist *, char *); 583 char *header_geth(RFCHeader *, char *, int); 584 char *header_getnext(RFCHeader *); 585 char *s_header_getcomplete(RFCHeader *, char *); 586 char *addr_token(char *); 587 RFCHeader *header_decode(RFCHeader *, char *, char *); 588 589 /* routing.c */ 590 extern Routing *routing_first; 591 extern Routing *routing_last; 592 extern Remap *remap_first; 593 extern Remap *remap_last; 594 extern Rewrite *rewrite_first; 595 extern Rewrite *rewrite_last; 596 extern MkRoute *mkroute_first; 597 extern MkRoute *mkroute_last; 598 599 int parse_cmd(char *); 600 int parse_flav(char *); 601 void routing_init(char *); 602 int node_match(Node *, Node *); 603 PktDesc *parse_pkt_name(char *, Node *, Node *); 604 605 /* sequencer.c */ 606 long sequencer(char *); 607 long sequencer_nx(char *, int); 608 609 #ifdef SPYES 610 /* spyes.c */ 611 void spyes_init(void); 612 Spy *spyes_lookup(Node *); 613 #endif /* SPYES */ 614 615 /* strtok_r.c */ 616 #define DELIM_WS " \t\r\n" 617 #define DELIM_EOL "\r\n" 618 #define NONE 0 619 #define QUOTE '\"' 620 #define DQUOTE '\"' 621 #define SQUOTE '\'' 622 623 #undef strtok 624 #undef strtok_r 625 626 char *strtok(char *, const char *); 627 char *xstrtok(char *, const char *); 628 char *strtok_r(char *, const char *, char **); 629 char *strtok_r_ext(char *, const char *, char **, int); 630 631 #define LOCAL_STRTOK char *local_strtok_lasts; 632 #define STRTOK(s,d) strtok_r_ext(s,d,&local_strtok_lasts,NONE) 633 #define STRTOK_Q(s,d) strtok_r_ext(s,d,&local_strtok_lasts,DQUOTE) 634 635 /* textlist.c */ 636 void tl_fput(FILE *, Textlist *); 637 void tl_add(Textlist *, Textline *); 638 void tl_remove(Textlist *, Textline *); 639 void tl_delete(Textlist *, Textline *); 640 void tl_init(Textlist *); 641 void tl_append(Textlist *, char *); 642 void tl_appendf(Textlist *, char *, ...) 643 __attribute__((format(printf, 2, 3))); 644 void tl_print(Textlist *, FILE *); 645 void tl_print_x(Textlist *, FILE *, char *); 646 void tl_print_xx(Textlist *, FILE *, char *, char *); 647 void tl_clear(Textlist *); 648 long tl_size(Textlist *); 649 void tl_addtl(Textlist *, Textlist *); 650 Textline *tl_get(Textlist *, char *, int); 651 char *tl_get_str(Textlist *, char *, int); 652 int tl_copy(Textlist *, Textlist *); 653 int tl_for_each(Textlist *, int (*)(Textline *, void *), void *); 654 void tl_char_iterator_start(TextlistCharIterator *, Textlist *); 655 size_t tl_char_iterator_next(TextlistCharIterator *, char *, size_t); 656 void tl_iterator_start(TextlistIterator *, Textlist *); 657 Textline *tl_iterator_next(TextlistIterator *); 658 Textlist *tl_dup(Textlist *); 659 void tl_free(Textlist *); 660 void tl_addtl_move(Textlist *, Textlist *); 661 662 /* tick.c */ 663 int copy_file(char *, char *, char *); 664 void tick_init(Tick *); 665 void tick_delete(Tick *); 666 int tick_put(Tick *, char *, mode_t); 667 int tick_get(Tick *, char *); 668 void tick_debug(Tick *, int); 669 #ifndef FECHO_PASSTHROUGHT 670 int tick_send(Tick *, Node *, char *, mode_t); 671 #else 672 int tick_send(Tick *, Node *, char *, int, mode_t, char *); 673 #endif /* FECHO_PASSTHROUGHT */ 674 void tick_add_path(Tick *); 675 676 /* tmps.c */ 677 void fatal(char *, int); 678 TmpS *tmps_alloc(size_t); 679 TmpS *tmps_realloc(TmpS *, size_t); 680 TmpS *tmps_find(char *); 681 void tmps_free(TmpS *); 682 void tmps_freeall(void); 683 TmpS *tmps_printf(const char *, ...) 684 __attribute__((format(printf, 1, 2))); 685 TmpS *tmps_copy(char *); 686 TmpS *tmps_stripsize(TmpS *); 687 char *s_alloc(size_t); 688 char *s_realloc(char *, size_t); 689 void s_free(char *s); 690 void s_freeall(void); 691 char *s_printf(const char *, ...) 692 __attribute__((format(printf, 1, 2))); 693 char *s_copy(char *); 694 char *s_stripsize(char *); 695 696 #define TMPS_RETURN(x) do { tmps_freeall(); return x; } while(0) 697 698 /* version.c */ 699 char *version_global(void); 700 char *version_local(char *); 701 int version_major(void); 702 int version_minor(void); 703 704 /* wildmat */ 705 int wildmat(char *, char *); 706 int wildmatch_file(char *, char *, int); 707 #ifdef FTN_ACL 708 int wildmatch_string(char *, char *, int); 709 #endif 710 int wildmatch(char *, char *, int); 711 712 /* xalloc.c */ 713 #define BUFFERSIZE (32*1024) /* Global buffer */ 714 extern char buffer[BUFFERSIZE]; 715 716 void *xmalloc(int); 717 void *xrealloc(void *, int); 718 void xfree(void *); 719 char *strsave(char *); 720 char *strsave2(char *, char *); 721 void exit_free(void); 722 723 MIMEInfo *get_mime(char *, char *, char *); 724 MIMEInfo *get_mime_from_header(RFCHeader *); 725 /* xstrnlen.c */ 726 size_t xstrnlen(const char *, size_t); 727 728 #endif 729