1/* externs.h -- extern function declarations which do not appear in their 2 own header file. */ 3 4/* Copyright (C) 1993-2005 Free Software Foundation, Inc. 5 6 This file is part of GNU Bash, the Bourne Again SHell. 7 8 Bash is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free 10 Software Foundation; either version 2, or (at your option) any later 11 version. 12 13 Bash is distributed in the hope that it will be useful, but WITHOUT ANY 14 WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 for more details. 17 18 You should have received a copy of the GNU General Public License along 19 with Bash; see the file COPYING. If not, write to the Free Software 20 Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ 21 22/* Make sure that this is included *after* config.h! */ 23 24#if !defined (_EXTERNS_H_) 25# define _EXTERNS_H_ 26 27#include "stdc.h" 28 29/* Functions from expr.c. */ 30extern intmax_t evalexp __P((char *, int *)); 31 32/* Functions from print_cmd.c. */ 33extern char *make_command_string __P((COMMAND *)); 34extern char *named_function_string __P((char *, COMMAND *, int)); 35 36extern void print_command __P((COMMAND *)); 37extern void print_simple_command __P((SIMPLE_COM *)); 38extern void print_word_list __P((WORD_LIST *, char *)); 39 40/* debugger support */ 41extern void print_for_command_head __P((FOR_COM *)); 42#if defined (SELECT_COMMAND) 43extern void print_select_command_head __P((SELECT_COM *)); 44#endif 45extern void print_case_command_head __P((CASE_COM *)); 46#if defined (DPAREN_ARITHMETIC) 47extern void print_arith_command __P((WORD_LIST *)); 48#endif 49#if defined (COND_COMMAND) 50extern void print_cond_command __P((COND_COM *)); 51#endif 52 53/* set -x support */ 54extern char *indirection_level_string __P((void)); 55extern void xtrace_print_assignment __P((char *, char *, int, int)); 56extern void xtrace_print_word_list __P((WORD_LIST *, int)); 57extern void xtrace_print_for_command_head __P((FOR_COM *)); 58#if defined (SELECT_COMMAND) 59extern void xtrace_print_select_command_head __P((SELECT_COM *)); 60#endif 61extern void xtrace_print_case_command_head __P((CASE_COM *)); 62#if defined (DPAREN_ARITHMETIC) 63extern void xtrace_print_arith_cmd __P((WORD_LIST *)); 64#endif 65#if defined (COND_COMMAND) 66extern void xtrace_print_cond_term __P((int, int, WORD_DESC *, char *, char *)); 67#endif 68 69/* Functions from shell.c. */ 70extern void exit_shell __P((int)) __attribute__((__noreturn__)); 71extern void sh_exit __P((int)) __attribute__((__noreturn__)); 72extern void disable_priv_mode __P((void)); 73extern void unbind_args __P((void)); 74 75#if defined (RESTRICTED_SHELL) 76extern int shell_is_restricted __P((char *)); 77extern int maybe_make_restricted __P((char *)); 78#endif 79 80extern void unset_bash_input __P((int)); 81extern void get_current_user_info __P((void)); 82 83/* Functions from eval.c. */ 84extern int reader_loop __P((void)); 85extern int parse_command __P((void)); 86extern int read_command __P((void)); 87 88/* Functions from braces.c. */ 89#if defined (BRACE_EXPANSION) 90extern char **brace_expand __P((char *)); 91#endif 92 93/* Miscellaneous functions from parse.y */ 94extern int yyparse __P((void)); 95extern int return_EOF __P((void)); 96extern void reset_parser __P((void)); 97extern WORD_LIST *parse_string_to_word_list __P((char *, int, const char *)); 98 99extern void free_pushed_string_input __P((void)); 100 101extern char *decode_prompt_string __P((char *)); 102 103extern int get_current_prompt_level __P((void)); 104extern void set_current_prompt_level __P((int)); 105 106#if defined (HISTORY) 107extern char *history_delimiting_chars __P((void)); 108#endif 109 110/* Declarations for functions defined in locale.c */ 111extern void set_default_locale __P((void)); 112extern void set_default_locale_vars __P((void)); 113extern int set_locale_var __P((char *, char *)); 114extern int set_lang __P((char *, char *)); 115extern void set_default_lang __P((void)); 116extern char *get_locale_var __P((char *)); 117extern char *localetrans __P((char *, int, int *)); 118extern char *mk_msgstr __P((char *, int *)); 119extern char *localeexpand __P((char *, int, int, int, int *)); 120 121/* Declarations for functions defined in list.c. */ 122extern void list_walk __P((GENERIC_LIST *, sh_glist_func_t *)); 123extern void wlist_walk __P((WORD_LIST *, sh_icpfunc_t *)); 124extern GENERIC_LIST *list_reverse (GENERIC_LIST *); 125extern int list_length (GENERIC_LIST*); 126extern GENERIC_LIST *list_append (GENERIC_LIST*, GENERIC_LIST*); 127extern GENERIC_LIST *list_remove (GENERIC_LIST**, Function*, char**); 128 129/* Declarations for functions defined in stringlib.c */ 130extern int find_string_in_alist __P((char *, STRING_INT_ALIST *, int)); 131extern char *find_token_in_alist __P((int, STRING_INT_ALIST *, int)); 132extern int find_index_in_alist __P((char *, STRING_INT_ALIST *, int)); 133 134extern char *substring __P((char *, int, int)); 135extern char *strsub __P((char *, char *, char *, int)); 136extern char *strcreplace __P((char *, int, char *, int)); 137extern void strip_leading __P((char *)); 138extern void strip_trailing __P((char *, int, int)); 139extern void xbcopy __P((char *, char *, int)); 140 141/* Functions from version.c. */ 142extern char *shell_version_string __P((void)); 143extern void show_shell_version __P((int)); 144 145/* Functions from the bash library, lib/sh/libsh.a. These should really 146 go into a separate include file. */ 147 148/* declarations for functions defined in lib/sh/clktck.c */ 149extern long get_clk_tck __P((void)); 150 151/* declarations for functions defined in lib/sh/clock.c */ 152extern void clock_t_to_secs (); 153extern void print_clock_t (); 154 155/* Declarations for functions defined in lib/sh/fmtulong.c */ 156#define FL_PREFIX 0x01 /* add 0x, 0X, or 0 prefix as appropriate */ 157#define FL_ADDBASE 0x02 /* add base# prefix to converted value */ 158#define FL_HEXUPPER 0x04 /* use uppercase when converting to hex */ 159#define FL_UNSIGNED 0x08 /* don't add any sign */ 160 161extern char *fmtulong __P((unsigned long int, int, char *, size_t, int)); 162 163/* Declarations for functions defined in lib/sh/fmtulong.c */ 164#if defined (HAVE_LONG_LONG) 165extern char *fmtullong __P((unsigned long long int, int, char *, size_t, int)); 166#endif 167 168/* Declarations for functions defined in lib/sh/fmtumax.c */ 169extern char *fmtumax __P((uintmax_t, int, char *, size_t, int)); 170 171/* Declarations for functions defined in lib/sh/getcwd.c */ 172#if !defined (HAVE_GETCWD) 173extern char *getcwd __P((char *, size_t)); 174#endif 175 176/* Declarations for functions defined in lib/sh/itos.c */ 177extern char *inttostr __P((intmax_t, char *, size_t)); 178extern char *itos __P((intmax_t)); 179extern char *uinttostr __P((uintmax_t, char *, size_t)); 180extern char *uitos __P((uintmax_t)); 181 182/* declarations for functions defined in lib/sh/makepath.c */ 183#define MP_DOTILDE 0x01 184#define MP_DOCWD 0x02 185#define MP_RMDOT 0x04 186 187extern char *sh_makepath __P((const char *, const char *, int)); 188 189/* declarations for functions defined in lib/sh/netconn.c */ 190extern int isnetconn __P((int)); 191 192/* declarations for functions defined in lib/sh/netopen.c */ 193extern int netopen __P((char *)); 194 195/* Declarations for functions defined in lib/sh/oslib.c */ 196 197#if !defined (HAVE_DUP2) || defined (DUP2_BROKEN) 198extern int dup2 __P((int, int)); 199#endif 200 201#if !defined (HAVE_GETDTABLESIZE) 202extern int getdtablesize __P((void)); 203#endif /* !HAVE_GETDTABLESIZE */ 204 205#if !defined (HAVE_GETHOSTNAME) 206extern int gethostname __P((char *, int)); 207#endif /* !HAVE_GETHOSTNAME */ 208 209extern int getmaxgroups __P((void)); 210extern long getmaxchild __P((void)); 211 212/* declarations for functions defined in lib/sh/pathcanon.c */ 213#define PATH_CHECKDOTDOT 0x0001 214#define PATH_CHECKEXISTS 0x0002 215#define PATH_HARDPATH 0x0004 216#define PATH_NOALLOC 0x0008 217 218extern char *sh_canonpath __P((char *, int)); 219 220/* declarations for functions defined in lib/sh/pathphys.c */ 221extern char *sh_physpath __P((char *, int)); 222extern char *sh_realpath __P((const char *, char *)); 223 224/* declarations for functions defined in lib/sh/setlinebuf.c */ 225#ifdef NEED_SH_SETLINEBUF_DECL 226extern int sh_setlinebuf __P((FILE *)); 227#endif 228 229/* declarations for functions defined in lib/sh/shaccess.c */ 230extern int sh_eaccess __P((char *, int)); 231 232/* declarations for functions defined in lib/sh/shmatch.c */ 233extern int sh_regmatch __P((const char *, const char *, int)); 234 235/* defines for flags argument to sh_regmatch. */ 236#define SHMAT_SUBEXP 0x001 /* save subexpressions in SH_REMATCH */ 237#define SHMAT_PWARN 0x002 /* print a warning message on invalid regexp */ 238 239/* declarations for functions defined in lib/sh/shquote.c */ 240extern char *sh_single_quote __P((char *)); 241extern char *sh_double_quote __P((char *)); 242extern char *sh_mkdoublequoted __P((const char *, int, int)); 243extern char *sh_un_double_quote __P((char *)); 244extern char *sh_backslash_quote __P((char *)); 245extern char *sh_backslash_quote_for_double_quotes __P((char *)); 246extern int sh_contains_shell_metas __P((char *)); 247 248/* declarations for functions defined in lib/sh/spell.c */ 249extern int spname __P((char *, char *)); 250 251/* declarations for functions defined in lib/sh/strcasecmp.c */ 252#if !defined (HAVE_STRCASECMP) 253extern int strncasecmp __P((const char *, const char *, int)); 254extern int strcasecmp __P((const char *, const char *)); 255#endif /* HAVE_STRCASECMP */ 256 257/* declarations for functions defined in lib/sh/strerror.c */ 258#if !defined (HAVE_STRERROR) && !defined (strerror) 259extern char *strerror __P((int)); 260#endif 261 262/* declarations for functions defined in lib/sh/strftime.c */ 263#if !defined (HAVE_STRFTIME) && defined (NEED_STRFTIME_DECL) 264extern size_t strftime __P((char *, size_t, const char *, const struct tm *)); 265#endif 266 267/* declarations for functions defined in lib/sh/strindex.c */ 268extern char *strindex __P((const char *, const char *)); 269 270/* declarations for functions and structures defined in lib/sh/stringlist.c */ 271 272/* This is a general-purpose argv-style array struct. */ 273typedef struct _list_of_strings { 274 char **list; 275 int list_size; 276 int list_len; 277} STRINGLIST; 278 279typedef int sh_strlist_map_func_t __P((char *)); 280 281extern STRINGLIST *strlist_create __P((int)); 282extern STRINGLIST *strlist_resize __P((STRINGLIST *, int)); 283extern void strlist_flush __P((STRINGLIST *)); 284extern void strlist_dispose __P((STRINGLIST *)); 285extern int strlist_remove __P((STRINGLIST *, char *)); 286extern STRINGLIST *strlist_copy __P((STRINGLIST *)); 287extern STRINGLIST *strlist_merge __P((STRINGLIST *, STRINGLIST *)); 288extern STRINGLIST *strlist_append __P((STRINGLIST *, STRINGLIST *)); 289extern STRINGLIST *strlist_prefix_suffix __P((STRINGLIST *, char *, char *)); 290extern void strlist_print __P((STRINGLIST *, char *)); 291extern void strlist_walk __P((STRINGLIST *, sh_strlist_map_func_t *)); 292extern void strlist_sort __P((STRINGLIST *)); 293 294/* declarations for functions defined in lib/sh/stringvec.c */ 295 296extern char **strvec_create __P((int)); 297extern char **strvec_resize __P((char **, int)); 298extern void strvec_flush __P((char **)); 299extern void strvec_dispose __P((char **)); 300extern int strvec_remove __P((char **, char *)); 301extern int strvec_len __P((char **)); 302extern int strvec_search __P((char **, char *)); 303extern char **strvec_copy __P((char **)); 304extern int strvec_strcmp __P((char **, char **)); 305extern void strvec_sort __P((char **)); 306 307extern char **strvec_from_word_list __P((WORD_LIST *, int, int, int *)); 308extern WORD_LIST *strvec_to_word_list __P((char **, int, int)); 309 310/* declarations for functions defined in lib/sh/strnlen.c */ 311#if !defined (HAVE_STRNLEN) 312extern size_t strnlen __P((const char *, size_t)); 313#endif 314 315/* declarations for functions defined in lib/sh/strpbrk.c */ 316#if !defined (HAVE_STRPBRK) 317extern char *strpbrk __P((const char *, const char *)); 318#endif 319 320/* declarations for functions defined in lib/sh/strtod.c */ 321#if !defined (HAVE_STRTOD) 322extern double strtod __P((const char *, char **)); 323#endif 324 325/* declarations for functions defined in lib/sh/strtol.c */ 326#if !HAVE_DECL_STRTOL 327extern long strtol __P((const char *, char **, int)); 328#endif 329 330/* declarations for functions defined in lib/sh/strtoll.c */ 331#if defined (HAVE_LONG_LONG) && !HAVE_DECL_STRTOLL 332extern long long strtoll __P((const char *, char **, int)); 333#endif 334 335/* declarations for functions defined in lib/sh/strtoul.c */ 336#if !HAVE_DECL_STRTOUL 337extern unsigned long strtoul __P((const char *, char **, int)); 338#endif 339 340/* declarations for functions defined in lib/sh/strtoull.c */ 341#if defined (HAVE_LONG_LONG) && !HAVE_DECL_STRTOULL 342extern unsigned long long strtoull __P((const char *, char **, int)); 343#endif 344 345/* declarations for functions defined in lib/sh/strimax.c */ 346#if !HAVE_DECL_STRTOIMAX 347extern intmax_t strtoimax __P((const char *, char **, int)); 348#endif 349 350/* declarations for functions defined in lib/sh/strumax.c */ 351#if !HAVE_DECL_STRTOUMAX 352extern uintmax_t strtoumax __P((const char *, char **, int)); 353#endif 354 355/* declarations for functions defined in lib/sh/strtrans.c */ 356extern char *ansicstr __P((char *, int, int, int *, int *)); 357extern char *ansic_quote __P((char *, int, int *)); 358extern int ansic_shouldquote __P((const char *)); 359extern char *ansiexpand __P((char *, int, int, int *)); 360 361/* declarations for functions defined in lib/sh/timeval.c. No prototypes 362 so we don't have to count on having a definition of struct timeval in 363 scope when this file is included. */ 364extern void timeval_to_secs (); 365extern void print_timeval (); 366 367/* declarations for functions defined in lib/sh/tmpfile.c */ 368#define MT_USETMPDIR 0x0001 369#define MT_READWRITE 0x0002 370#define MT_USERANDOM 0x0004 371 372extern char *sh_mktmpname __P((char *, int)); 373extern int sh_mktmpfd __P((char *, int, char **)); 374/* extern FILE *sh_mktmpfp __P((char *, int, char **)); */ 375 376/* declarations for functions defined in lib/sh/winsize.c */ 377extern void get_new_window_size __P((int, int *, int *)); 378 379/* declarations for functions defined in lib/sh/xstrchr.c */ 380#undef xstrchr 381extern char *xstrchr __P((const char *, int)); 382 383/* declarations for functions defined in lib/sh/zcatfd.c */ 384extern int zcatfd __P((int, int, char *)); 385 386/* declarations for functions defined in lib/sh/zread.c */ 387extern ssize_t zread __P((int, char *, size_t)); 388extern ssize_t zreadintr __P((int, char *, size_t)); 389extern ssize_t zreadc __P((int, char *)); 390extern void zreset __P((void)); 391extern void zsyncfd __P((int)); 392 393/* declarations for functions defined in lib/sh/zwrite.c */ 394extern int zwrite __P((int, char *, size_t)); 395 396#endif /* _EXTERNS_H_ */ 397