summaryrefslogtreecommitdiff
path: root/ext/mysql/libmysql/default.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysql/libmysql/default.c')
-rw-r--r--ext/mysql/libmysql/default.c384
1 files changed, 0 insertions, 384 deletions
diff --git a/ext/mysql/libmysql/default.c b/ext/mysql/libmysql/default.c
deleted file mode 100644
index d9dbfcf1c6..0000000000
--- a/ext/mysql/libmysql/default.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
-This file is public domain and comes with NO WARRANTY of any kind */
-
-/****************************************************************************
-** Add all options from files named "group".cnf from the default_directories
-** before the command line arguments.
-** On Windows defaults will also search in the Windows directory for a file
-** called 'group'.ini
-** As long as the program uses the last argument for conflicting
-** options one only have to add a call to "load_defaults" to enable
-** use of default values.
-** pre- and end 'blank space' are removed from options and values. The
-** following escape sequences are recognized in values: \b \t \n \r \\
-**
-** The following arguments are handled automaticly; If used, they must be
-** first argument on the command line!
-** --no-defaults ; no options are read.
-** --defaults-file=full-path-to-default-file ; Only this file will be read.
-** --defaults-extra-file=full-path-to-default-file ; Read this file before ~/
-** --print-defaults ; Print the modified command line and exit
-****************************************************************************/
-
-#undef SAFEMALLOC /* safe_malloc is not yet initailized */
-
-#include "mysys_priv.h"
-#include "m_string.h"
-#include "m_ctype.h"
-
-char *defaults_extra_file=0;
-
-/* Which directories are searched for options (and in which order) */
-
-const char *default_directories[]= {
-#ifdef __WIN__
-"C:/",
-#else
-"/etc/",
-#endif
-#ifdef DATADIR
-DATADIR,
-#endif
-"", /* Place for defaults_extra_dir */
-#ifndef __WIN__
-"~/",
-#endif
-NullS,
-};
-
-#define default_ext ".cnf" /* extension for config file */
-#ifdef __WIN__
-#include <winbase.h>
-#define windows_ext ".ini"
-#endif
-
-static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
- const char *dir, const char *config_file,
- const char *ext, TYPELIB *group);
-
-
-void load_defaults(const char *conf_file, const char **groups,
- int *argc, char ***argv)
-{
- DYNAMIC_ARRAY args;
- const char **dirs, *forced_default_file;
- TYPELIB group;
- my_bool found_print_defaults=0;
- uint args_used=0;
- MEM_ROOT alloc;
- char *ptr,**res;
- DBUG_ENTER("load_defaults");
-
- init_alloc_root(&alloc,128,0);
- if (*argc >= 2 && !strcmp(argv[0][1],"--no-defaults"))
- {
- /* remove the --no-defaults argument and return only the other arguments */
- uint i;
- if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
- (*argc + 1)*sizeof(char*))))
- goto err;
- res= (char**) (ptr+sizeof(alloc));
- res[0]= **argv; /* Copy program name */
- for (i=2 ; i < (uint) *argc ; i++)
- res[i-1]=argv[0][i];
- (*argc)--;
- *argv=res;
- *(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
- DBUG_VOID_RETURN;
- }
-
- /* Check if we want to force the use a specific default file */
- forced_default_file=0;
- if (*argc >= 2)
- {
- if (is_prefix(argv[0][1],"--defaults-file="))
- {
- forced_default_file=strchr(argv[0][1],'=')+1;
- args_used++;
- }
- else if (is_prefix(argv[0][1],"--defaults-extra-file="))
- {
- defaults_extra_file=strchr(argv[0][1],'=')+1;
- args_used++;
- }
- }
-
- group.count=0;
- group.name= "defaults";
- group.type_names= groups;
- for (; *groups ; groups++)
- group.count++;
-
- if (init_dynamic_array(&args, sizeof(char*),*argc, 32))
- goto err;
- if (forced_default_file)
- {
- if (search_default_file(&args, &alloc, "", forced_default_file, "",
- &group))
- goto err;
- }
- else if (dirname_length(conf_file))
- {
- if (search_default_file(&args, &alloc, NullS, conf_file, default_ext,
- &group))
- goto err;
- }
- else
- {
-#ifdef __WIN__
- char system_dir[FN_REFLEN];
- GetWindowsDirectory(system_dir,sizeof(system_dir));
- if (search_default_file(&args, &alloc, system_dir, conf_file, windows_ext,
- &group))
- goto err;
-#endif
-#ifdef __EMX__
- if (getenv("ETC") &&
- search_default_file(&args, &alloc, getenv("ETC"), conf_file,
- default_ext, &group))
- goto err;
-#endif
- for (dirs=default_directories ; *dirs; dirs++)
- {
- int error=0;
- if (**dirs)
- error=search_default_file(&args, &alloc, *dirs, conf_file,
- default_ext, &group);
- else if (defaults_extra_file)
- error=search_default_file(&args, &alloc, NullS, defaults_extra_file,
- default_ext, &group);
- if (error)
- goto err;
- }
- }
- if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
- (args.elements + *argc +1) *sizeof(char*))))
- goto err;
- res= (char**) (ptr+sizeof(alloc));
-
- /* copy name + found arguments + command line arguments to new array */
- res[0]=argv[0][0];
- memcpy((gptr) (res+1), args.buffer, args.elements*sizeof(char*));
- /* Skipp --defaults-file and --defaults-extra-file */
- (*argc)-= args_used;
- (*argv)+= args_used;
-
- /* Check if we wan't to see the new argument list */
- if (*argc >= 2 && !strcmp(argv[0][1],"--print-defaults"))
- {
- found_print_defaults=1;
- --*argc; ++*argv; /* skipp argument */
- }
-
- memcpy((gptr) (res+1+args.elements), (char*) ((*argv)+1),
- (*argc-1)*sizeof(char*));
- res[args.elements+ *argc]=0; /* last null */
-
- (*argc)+=args.elements;
- *argv= (char**) res;
- *(MEM_ROOT*) ptr= alloc; /* Save alloc root for free */
- delete_dynamic(&args);
- if (found_print_defaults)
- {
- int i;
- printf("%s would have been started with the following arguments:\n",
- **argv);
- for (i=1 ; i < *argc ; i++)
- printf("%s ", (*argv)[i]);
- puts("");
- exit(1);
- }
- DBUG_VOID_RETURN;
-
- err:
- fprintf(stderr,"Program aborted\n");
- exit(1);
-}
-
-
-void free_defaults(char **argv)
-{
- MEM_ROOT ptr;
- memcpy_fixed((char*) &ptr,(char *) argv - sizeof(ptr), sizeof(ptr));
- free_root(&ptr,MYF(0));
-}
-
-
-static my_bool search_default_file(DYNAMIC_ARRAY *args, MEM_ROOT *alloc,
- const char *dir, const char *config_file,
- const char *ext, TYPELIB *group)
-{
- char name[FN_REFLEN+10],buff[FN_REFLEN+1],*ptr,*end,*value,*tmp;
- FILE *fp;
- uint line=0;
- my_bool read_values=0,found_group=0;
-
- if ((dir ? strlen(dir) : 0 )+strlen(config_file) >= FN_REFLEN-3)
- return 0; /* Ignore wrong paths */
- if (dir)
- {
- strmov(name,dir);
- convert_dirname(name);
- if (dir[0] == FN_HOMELIB) /* Add . to filenames in home */
- strcat(name,".");
- strxmov(strend(name),config_file,ext,NullS);
- }
- else
- {
- strmov(name,config_file);
- }
- if (!(fp = my_fopen(fn_format(name,name,"","",4),O_RDONLY,MYF(0))))
- return 0; /* Ignore wrong files */
-
- while (fgets(buff,sizeof(buff)-1,fp))
- {
- line++;
- /* Ignore comment and empty lines */
- for (ptr=buff ; isspace(*ptr) ; ptr++ ) ;
- if (*ptr == '#' || *ptr == ';' || !*ptr)
- continue;
- if (*ptr == '[') /* Group name */
- {
- found_group=1;
- if (!(end=(char *) strchr(++ptr,']')))
- {
- fprintf(stderr,
- "error: Wrong group definition in config file: %s at line %d\n",
- name,line);
- goto err;
- }
- for ( ; isspace(end[-1]) ; end--) ; /* Remove end space */
- end[0]=0;
- read_values=find_type(ptr,group,3) > 0;
- continue;
- }
- if (!found_group)
- {
- fprintf(stderr,
- "error: Found option without preceding group in config file: %s at line: %d\n",
- name,line);
- goto err;
- }
- if (!read_values)
- continue;
- if (!(end=value=strchr(ptr,'=')))
- end=strend(ptr); /* Option without argument */
- for ( ; isspace(end[-1]) ; end--) ;
- if (!value)
- {
- if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3)))
- goto err;
- strmake(strmov(tmp,"--"),ptr,(uint) (end-ptr));
- if (insert_dynamic(args,(gptr) &tmp))
- goto err;
- }
- else
- {
- /* Remove pre- and end space */
- char *value_end;
- for (value++ ; isspace(*value); value++) ;
- value_end=strend(value);
- for ( ; isspace(value_end[-1]) ; value_end--) ;
- if (value_end < value) /* Empty string */
- value_end=value;
- if (!(tmp=alloc_root(alloc,(uint) (end-ptr)+3 +
- (uint) (value_end-value)+1)))
- goto err;
- if (insert_dynamic(args,(gptr) &tmp))
- goto err;
- ptr=strnmov(strmov(tmp,"--"),ptr,(uint) (end-ptr));
- *ptr++= '=';
- for ( ; value != value_end; value++)
- {
- if (*value == '\\' && value != value_end-1)
- {
- switch(*++value) {
- case 'n':
- *ptr++='\n';
- break;
- case 't':
- *ptr++= '\t';
- break;
- case 'r':
- *ptr++ = '\r';
- break;
- case 'b':
- *ptr++ = '\b';
- break;
- case 's':
- *ptr++= ' '; /* space */
- break;
- case '\\':
- *ptr++= '\\';
- break;
- default: /* Unknown; Keep '\' */
- *ptr++= '\\';
- *ptr++= *value;
- break;
- }
- }
- else
- *ptr++= *value;
- }
- *ptr=0;
- }
- }
- my_fclose(fp,MYF(0));
- return(0);
-
- err:
- my_fclose(fp,MYF(0));
- return 1;
-}
-
-
-void print_defaults(const char *conf_file, const char **groups)
-{
-#ifdef __WIN__
- bool have_ext=fn_ext(conf_file)[0] != 0;
-#endif
- char name[FN_REFLEN];
- const char **dirs;
- puts("\nDefault options are read from the following files in the given order:");
-
- if (dirname_length(conf_file))
- fputs(conf_file,stdout);
- else
- {
-#ifdef __WIN__
- GetWindowsDirectory(name,sizeof(name));
- printf("%s\\%s%s ",name,conf_file,have_ext ? "" : windows_ext);
-#endif
-#ifdef __EMX__
- if (getenv("ETC"))
- printf("%s\\%s%s ", getenv("ETC"), conf_file, default_ext);
-#endif
- for (dirs=default_directories ; *dirs; dirs++)
- {
- if (**dirs)
- strmov(name,*dirs);
- else if (defaults_extra_file)
- strmov(name,defaults_extra_file);
- else
- continue;
- convert_dirname(name);
- if (name[0] == FN_HOMELIB) /* Add . to filenames in home */
- strcat(name,".");
- strxmov(strend(name),conf_file,default_ext," ",NullS);
- fputs(name,stdout);
- }
- puts("");
- }
- fputs("The following groups are read:",stdout);
- for ( ; *groups ; groups++)
- {
- fputc(' ',stdout);
- fputs(*groups,stdout);
- }
- puts("\nThe following options may be given as the first argument:\n\
---print-defaults Print the program argument list and exit\n\
---no-defaults Don't read default options from any options file\n\
---defaults-file=# Only read default options from the given file #\n\
---defaults-extra-file=# Read this file after the global files are read");
-}
-