X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8e0f9bd3daae9d05dec58026d5a5924367e4e874..303e8387acecca26329e939f228f78ca805b7a15:/h/prototypes.h diff --git a/h/prototypes.h b/h/prototypes.h index 33ac013d..5c1b5cf1 100644 --- a/h/prototypes.h +++ b/h/prototypes.h @@ -18,15 +18,15 @@ char *etcpath(char *); struct msgs_array; void add_profile_entry (const char *, const char *); -void adios (char *, const char *, ...) NORETURN; +void adios (const char *, const char *, ...) NORETURN; void admonish (char *, char *, ...); -void advertise (char *, char *, const char *, va_list); -void advise (char *, char *, ...); +void advertise (const char *, char *, const char *, va_list); +void advise (const char *, const char *, ...); char **argsplit (char *, char **, int *); void argsplit_msgarg (struct msgs_array *, char *, char **); void argsplit_insert (struct msgs_array *, char *, char **); void arglist_free (char *, char **); -void ambigsw (char *, struct swit *); +void ambigsw (const char *, const struct swit *); int atooi(char *); char **brkstring (char *, char *, char *); @@ -48,13 +48,14 @@ char *concat (const char *, ...); int context_del (char *); char *context_find (const char *); char *context_find_by_type (const char *, const char *, const char *); +int context_find_prefix(const char *); int context_foil (char *); void context_read (void); void context_replace (char *, char *); void context_save (void); char *copy (const char *, char *); char **copyip (char **, char **, int); -void cpydata (int, int, char *, char *); +void cpydata (int, int, const char *, const char *); void cpydgst (int, int, char *, char *); char *cpytrim (const char *); char *rtrim (char *); @@ -118,12 +119,44 @@ int folder_pack (struct msgs **, int); struct msgs *folder_read (char *name, int lockflag); struct msgs *folder_realloc (struct msgs *, int, int); -int gans (char *, struct swit *); -char **getans (char *, struct swit *); + +/* + * Flush standard output, read a line from standard input into a static buffer, + * zero out the newline, and return a pointer to the buffer. + * On error, return NULL. + */ +const char *read_line(void); + +/* + * Print null-terminated PROMPT to and flush standard output. Read answers from + * standard input until one matches an entry in SWITCHES. When one matches, + * return its swret field. Return 0 on EOF. + */ +int read_switch(const char *PROMPT, const struct swit *SWITCHES); + +/* + * If standard input is not a tty, return 1 without printing anything. Else, + * print null-terminated PROMPT to and flush standard output. Read answers from + * standard input until one is "yes" or "no", returning 1 for "yes" and 0 for + * "no". Also return 0 on EOF. + */ +int read_yes_or_no_if_tty(const char *PROMPT); + +/* + * Print null-terminated PROMPT to and flush standard output. Read multi-word + * answers from standard input until a first word matches an entry in SWITCHES. + * When one matches, return a pointer to an array of pointers to the words. + * Return NULL on EOF, interrupt, or other error. + */ +char **read_switch_multiword(const char *PROMPT, const struct swit *SWITCHES); + +/* + * Same as read_switch_multiword but using readline(3) for input. + */ #ifdef READLINE_SUPPORT -char **getans_via_readline (char *, struct swit *); +char **read_switch_multiword_via_readline (char *, struct swit *); #endif /* READLINE_SUPPORT */ -int getanswer (char *); + char **getarguments (char *, int, char **, int); /* @@ -212,7 +245,7 @@ int lkopendata(const char *, int, mode_t, int *); FILE *lkfopenspool(const char *, const char *); int lkopenspool(const char *, int, mode_t, int *); int m_atoi (char *); -char *m_backup (char *); +char *m_backup (const char *); int m_convert (struct msgs *, char *); char *m_draft (char *, char *, int, int *); void m_getfld_state_reset (m_getfld_state_t *); @@ -247,7 +280,7 @@ void m_popen(char *name, int savestdout); void m_pclose(void); void m_unknown(m_getfld_state_t *, FILE *); -int makedir (char *); +int makedir (const char *); char *message_id (time_t, int); /* @@ -282,7 +315,7 @@ int pidwait (pid_t, int); int pidstatus (int, FILE *, char *); char *pluspath(char *); void print_help (char *, struct swit *, int); -void print_sw (char *, struct swit *, char *, FILE *); +void print_sw (const char *, const struct swit *, char *, FILE *); void print_version (char *); void push (void); char *pwd (void); @@ -328,7 +361,7 @@ void seq_setcur (struct msgs *, int); void seq_setprev (struct msgs *); void seq_setunseen (struct msgs *, int); int showfile (char **, char *); -int smatch(char *, struct swit *); +int smatch(const char *, const struct swit *); /* * Convert a set of bit flags to printable format. @@ -363,7 +396,7 @@ int smatch(char *, struct swit *); * from least significant bit to most significant. */ char *snprintb (char *buffer, size_t size, unsigned flags, char *bitfield); -int ssequal (char *, char *); +int ssequal (const char *, const char *); int stringdex (char *, char *); char *trimcpy (char *); int unputenv (char *); @@ -418,7 +451,7 @@ int sc_length(void); int sc_width(void); int build_form (char *, char *, int *, char *, char *, char *, char *, char *, char *); -int sendsbr (char **, int, char *, char *, struct stat *, int); +int sendsbr (char **, int, char *, char *, struct stat *, int, const char *); int SOprintf (char *, ...); int what_now (char *, int, int, char *, char *, int, struct msgs *, char *, int, char *, int); @@ -440,6 +473,17 @@ int writeBase64aux(FILE *in, FILE *out, int crlf); int writeBase64 (unsigned char *, size_t, unsigned char *); int writeBase64raw (unsigned char *, size_t, unsigned char *); +/* + * first argument: the string to be decoded + * second argument: the decoded bytes + * third argument: number of decoded bytes + * fourth argument: non-zero for text content, and for which CR's should be skipped + * fifth argument: for an MD5 digest, it can be null + */ +int decodeBase64 (const char *, const char **, size_t *, int, unsigned char *); + +void hexify (const unsigned char *, size_t, char **); + /* * credentials management */