Remove the 'how' parameter to rsindex(), making it reverse-search for only the first matching character, as sindex() already does. There are only two callers, and one already passed a hardcoded value of 1. Also change rsindex() so that it starts searching at the character BEFORE the passed in position. This makes it easier to repeatedly call rsindex() in a loop to search for the Nth matching character, and also fixes a technical instance of undefined behaviour where a pointer is decremented to point before the start of the string. Remove the 'mark' parameter to strsearch(). Instead, always forward-search from the beginning of the string and reverse-search from the end of the string, as this is what the two callers want anyway. Bump the module ABI version because these functions are exported to modules.
251 lines
9.0 KiB
C
251 lines
9.0 KiB
C
/*
|
|
* ircaux.h: header file for ircaux.c
|
|
*
|
|
* Written By Michael Sandrof
|
|
*
|
|
* Copyright(c) 1990
|
|
*
|
|
* See the COPYRIGHT file, or do a HELP IRCII COPYRIGHT
|
|
*
|
|
* @(#)$Id$
|
|
*/
|
|
#ifndef IRCAUX_H_
|
|
#define IRCAUX_H_
|
|
|
|
#include "irc.h"
|
|
#include "irc_std.h"
|
|
|
|
typedef int comp_len_func (char *, char *, int);
|
|
typedef int comp_func (char *, char *);
|
|
|
|
extern unsigned char stricmp_table[];
|
|
|
|
char * BX_check_nickname (char *);
|
|
char * BX_next_arg (char *, char **);
|
|
char * BX_new_next_arg (char *, char **);
|
|
char * BX_new_new_next_arg (char *, char **, char *);
|
|
char * BX_last_arg (char **);
|
|
char * BX_expand_twiddle (char *);
|
|
char * BX_upper (char *);
|
|
char * BX_lower (char *);
|
|
char *inv_strpbrk(const char *s, const char *reject);
|
|
char * BX_sindex (const char *, const char *);
|
|
char * BX_rsindex (const char *, const char *, const char *);
|
|
char * BX_path_search (char *, char *);
|
|
char * BX_double_quote (const char *, const char *, char *);
|
|
|
|
char * n_malloc_strcpy (char **, const char *, const char *, const char *, const int);
|
|
char * BX_malloc_str2cpy (char **, const char *, const char *);
|
|
char * n_malloc_strcat (char **, const char *, const char *, const char *, const int);
|
|
|
|
char * BX_m_s3cat_s (char **, const char *, const char *);
|
|
char * BX_m_s3cat (char **, const char *, const char *);
|
|
char * BX_m_3cat (char **, const char *, const char *);
|
|
char * BX_m_e3cat (char **, const char *, const char *);
|
|
char * BX_m_2dup (const char *, const char *);
|
|
char * BX_m_3dup (const char *, const char *, const char *);
|
|
char * BX_m_opendup (const char *, ...);
|
|
char * n_m_strdup (const char *, const char *, const char *, const int);
|
|
char * BX_malloc_sprintf (char **, const char *, ...);
|
|
char * BX_m_sprintf (const char *, ...);
|
|
int BX_is_number (const char *);
|
|
char * BX_my_ctime (time_t);
|
|
|
|
int BX_my_stricmp (const char *, const char *);
|
|
int BX_my_strnicmp (const char *, const char *, size_t);
|
|
|
|
int BX_my_strnstr (const char *, const char *, size_t);
|
|
int BX_scanstr (char *, char *);
|
|
void really_free (int);
|
|
char * BX_chop (char *, int);
|
|
char * BX_strmcpy (char *, const char *, int);
|
|
char * BX_strmcat (char *, const char *, int);
|
|
char * strmcat_ue (char *, const char *, int);
|
|
char * n_m_strcat_ues (char **, char *, int, const char *, const char *, const int);
|
|
char * BX_stristr (const char *, const char *);
|
|
char * BX_rstristr (char *, char *);
|
|
FILE * BX_uzfopen (char **, char *, int);
|
|
int BX_end_strcmp (const char *, const char *, int);
|
|
void BX_ircpanic (char *, ...);
|
|
int fw_strcmp (comp_len_func *, char *, char *);
|
|
int lw_strcmp (comp_func *, char *, char *);
|
|
int open_to (char *, int, off_t);
|
|
struct timeval BX_get_time (struct timeval *);
|
|
double BX_time_diff (struct timeval, struct timeval);
|
|
double time_since(const struct timeval *tv_from);
|
|
double time_until(const struct timeval *tv_to);
|
|
int time_cmp(const struct timeval *a, const struct timeval *b);
|
|
struct timeval *time_offset(struct timeval *tv, double offset);
|
|
char * BX_plural (int);
|
|
int BX_time_to_next_minute (void);
|
|
char * BX_remove_trailing_spaces (char *);
|
|
char * BX_my_ltoa (long);
|
|
char * BX_strformat (char *, const char *, int, char);
|
|
char * chop_word (char *);
|
|
int BX_splitw (char *, char ***);
|
|
char * BX_unsplitw (char ***, int);
|
|
int BX_check_val (char *);
|
|
char * BX_strextend (char *, char, int);
|
|
char * strext (char *, char *);
|
|
char * BX_pullstr (char *, char *);
|
|
int BX_empty (const char *);
|
|
char * safe_new_next_arg (char *, char **);
|
|
char * BX_MatchingBracket (register char *, register char, register char);
|
|
int BX_word_count (char *);
|
|
int BX_parse_number (char **);
|
|
char * BX_remove_brackets (const char *, const char *, int *);
|
|
u_long hashpjw (char *, u_long);
|
|
char * BX_m_dupchar (int);
|
|
char * BX_strmccat (char *, char, int);
|
|
off_t file_size (char *);
|
|
int is_root (char *, char *, int);
|
|
size_t BX_streq (const char *, const char *);
|
|
size_t BX_strieq (const char *, const char *);
|
|
char * n_m_strndup (const char *, size_t, const char *, const char *, const int);
|
|
char * BX_on_off (int);
|
|
char * BX_rfgets (char *, int, FILE *);
|
|
char * BX_strmopencat (char *, int, ...);
|
|
long BX_my_atol (const char *);
|
|
char * s_next_arg (char **);
|
|
char * BX_next_in_comma_list (char *, char **);
|
|
void BX_strip_control (const char *, char *);
|
|
int BX_figure_out_address (char *, char **, char **, char **, char **, int *);
|
|
int count_char (const unsigned char *, const unsigned char);
|
|
char * BX_strnrchr (char *, char, int);
|
|
void BX_mask_digits (char **);
|
|
const char *BX_strfill (char, int);
|
|
char * BX_ov_strcpy (char *, const char *);
|
|
char * BX_strpcat (char *, const char *, ...);
|
|
char * BX_strmpcat (char *, size_t, const char *, ...);
|
|
char * chomp (char *);
|
|
size_t BX_ccspan (const char *, int);
|
|
char *BX_strcpy_nocolorcodes(char *, const char *);
|
|
unsigned long randm(unsigned long);
|
|
unsigned long randt(unsigned long);
|
|
unsigned long randd(unsigned long);
|
|
unsigned long BX_random_number(unsigned long);
|
|
char * get_userhost (void);
|
|
|
|
char * urlencode (const char *);
|
|
char * urldecode (char *);
|
|
char * base64_encode (const void *data, size_t size);
|
|
|
|
/* From words.c */
|
|
#define SOS -32767
|
|
#define EOS 32767
|
|
char *BX_strsearch(const char *, const char *, int);
|
|
char *BX_move_to_word(const char *, int);
|
|
char *BX_move_word_rel(const char *, char **, int);
|
|
char *BX_extract(char *, int, int);
|
|
char *BX_extract2(const char *, int, int);
|
|
int BX_wild_match(const char *, const char *);
|
|
|
|
/* Used for connect_by_number */
|
|
#define SERVICE_SERVER 0
|
|
#define SERVICE_CLIENT 1
|
|
#define PROTOCOL_TCP 0
|
|
#define PROTOCOL_UDP 1
|
|
|
|
/* Used from network.c */
|
|
int BX_connect_by_number (char *, unsigned short *, int, int, int);
|
|
struct sockaddr_foobar * BX_lookup_host(const char *);
|
|
char * BX_host_to_ip (const char *);
|
|
char * BX_ip_to_host (const char *);
|
|
char * BX_one_to_another (const char *);
|
|
int BX_set_blocking (int);
|
|
int BX_set_non_blocking (int);
|
|
int my_accept (int, struct sockaddr *, socklen_t *);
|
|
int lame_resolv (const char *, struct sockaddr_foobar *);
|
|
|
|
#define my_isspace(x) \
|
|
((x) == 9 || (x) == 10 || (x) == 11 || (x) == 12 || (x) == 13 || (x) == 32)
|
|
|
|
#define my_isdigit(x) \
|
|
(*x >= '0' && *x <= '9') || \
|
|
((*x == '-' || *x == '+') && (x[1] >= '0' && x[1] <= '9'))
|
|
|
|
#define LOCAL_COPY(y) strcpy(alloca(strlen((y)) + 1), y)
|
|
|
|
#define strbegins(a, b) (!strncmp((a), (b), strlen(b)))
|
|
|
|
#define _1KB ((double) 1000)
|
|
#define _1MEG (_1KB * _1KB)
|
|
#define _1GIG (_1KB * _1KB * _1KB)
|
|
#define _1TER (_1KB * _1KB * _1KB * _1KB)
|
|
#define _1ETA (_1KB * _1KB * _1KB * _1KB * _1KB)
|
|
|
|
#if 0
|
|
#define _1MEG (1024.0*1024.0)
|
|
#define _1GIG (1024.0*1024.0*1024.0)
|
|
#define _1TER (1024.0*1024.0*1024.0*1024.0)
|
|
#define _1ETA (1024.0*1024.0*1024.0*1024.0*1024.0)
|
|
#endif
|
|
|
|
#define _GMKs(x) ( ((double)x > _1ETA) ? "eb" : \
|
|
(((double)x > _1TER) ? "tb" : (((double)x > _1GIG) ? "gb" : \
|
|
(((double)x > _1MEG) ? "mb" : (((double)x > _1KB)? "kb" : "bytes")))))
|
|
|
|
#define _GMKv(x) (((double)x > _1ETA) ? \
|
|
((double)x/_1ETA) : (((double)x > _1TER) ? \
|
|
((double)x/_1TER) : (((double)x > _1GIG) ? \
|
|
((double)x/_1GIG) : (((double)x > _1MEG) ? \
|
|
((double)x/_1MEG) : (((double)x > _1KB) ? \
|
|
((double)x/_1KB): (double)x)))) )
|
|
|
|
void *n_malloc (size_t, const char *, const char *, const int);
|
|
void *n_realloc (void *, size_t, const char *, const char *, const int);
|
|
|
|
void *n_free (void *, const char *, const char *, const int);
|
|
|
|
#define MODULENAME NULL
|
|
|
|
#define new_malloc(x) n_malloc(x, MODULENAME, __FILE__, __LINE__)
|
|
#define new_free(x) (*(x) = n_free(*(x), MODULENAME, __FILE__, __LINE__))
|
|
|
|
#define RESIZE(x, y, z) ((x) = n_realloc((x), sizeof(y) * (z), MODULENAME, __FILE__, __LINE__))
|
|
#define malloc_strcpy(x, y) n_malloc_strcpy((char **)x, (char *)y, MODULENAME, __FILE__, __LINE__)
|
|
#define malloc_strcat(x, y) n_malloc_strcat((char **)x, (char *)y, MODULENAME, __FILE__, __LINE__)
|
|
#define m_strdup(x) n_m_strdup(x, MODULENAME, __FILE__, __LINE__)
|
|
#define m_strcat_ues(x, y, z) n_m_strcat_ues(x, y, z, MODULENAME, __FILE__, __LINE__)
|
|
#define m_strndup(x, y) n_m_strndup(x, y, MODULENAME, __FILE__, __LINE__)
|
|
|
|
char *encode (const char *, int);
|
|
char *decode (const char *);
|
|
char *BX_cryptit (const char *);
|
|
int checkpass (const char *, const char *);
|
|
|
|
|
|
/* Used for the inbound mangling stuff */
|
|
|
|
#define MANGLE_ESCAPES 1 << 0
|
|
#define MANGLE_ANSI_CODES 1 << 1
|
|
#define STRIP_COLOR 1 << 2
|
|
#define STRIP_REVERSE 1 << 3
|
|
#define STRIP_UNDERLINE 1 << 4
|
|
#define STRIP_BOLD 1 << 5
|
|
#define STRIP_BLINK 1 << 6
|
|
#define STRIP_ROM_CHAR 1 << 7
|
|
#define STRIP_ND_SPACE 1 << 8
|
|
#define STRIP_ALL_OFF 1 << 9
|
|
#define STRIP_ALT_CHAR 1 << 10
|
|
#define PRE_MANGLE 1 << 11
|
|
|
|
extern int outbound_line_mangler;
|
|
extern int inbound_line_mangler;
|
|
extern int logfile_line_mangler;
|
|
extern int operlog_line_mangler;
|
|
|
|
size_t BX_mangle_line (char *, int, size_t);
|
|
int BX_charcount (const char *, char);
|
|
char *BX_stripdev (char *);
|
|
char *convert_dos (char *);
|
|
char *convert_unix (char *);
|
|
int is_dos (char *);
|
|
void strip_chars (char *, char *, char);
|
|
char *longcomma (long);
|
|
char *ulongcomma (unsigned long);
|
|
|
|
#define SAFE(x) (((x) && *(x)) ? (x) : empty_string)
|
|
|
|
#endif /* IRCAUX_H_ */
|