12
12
You should have received a copy of the GNU General Public License
13
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
16
16
/****************************************************************************
17
17
Add all options from files named "group".cnf from the default_directories
181
181
TYPELIB *group= ctx->group;
183
183
if (!(extra_groups=
184
(const char**)ctx->alloc->alloc_root(
184
(const char**)alloc_root(ctx->alloc,
185
185
(2*group->count+1)*sizeof(char*))))
191
191
extra_groups[i]= group->type_names[i]; /** copy group */
193
193
len= strlen(extra_groups[i]);
194
if (!(ptr= (char *)ctx->alloc->alloc_root( len+instance_len+1)))
194
if (!(ptr= (char *)alloc_root(ctx->alloc, len+instance_len+1)))
197
197
extra_groups[i+group->count]= ptr;
290
290
if (find_type((char *)group_name, ctx->group, 3))
292
if (!(tmp= (char *)ctx->alloc->alloc_root(strlen(option) + 1)))
292
if (!(tmp= (char *)alloc_root(ctx->alloc, strlen(option) + 1)))
294
294
if (insert_dynamic(ctx->args, (unsigned char*) &tmp))
324
324
int org_argc= argc, prev_argc= 0;
325
325
*defaults= *extra_defaults= *group_suffix= 0;
327
const std::string DEFAULTS_FILE("--defaults-file=");
328
const std::string DEFAULTS_EXTRA_FILE("--defaults-extra-file=");
329
const std::string DEFAULTS_GROUP_SUFFIX("--defaults-group-suffix=");
331
327
while (argc >= 2 && argc != prev_argc)
333
329
/* Skip program name or previously handled argument */
335
331
prev_argc= argc; /* To check if we found */
336
if (!*defaults && (strncmp(*argv,
337
DEFAULTS_FILE.c_str(),
338
DEFAULTS_FILE.size()) == 0))
332
if (!*defaults && (strncmp(*argv,"--defaults-file=", sizeof("--defaults-file=")) == 0))
340
*defaults= *argv + DEFAULTS_FILE.size();
334
*defaults= *argv + sizeof("--defaults-file=")-1;
344
if (!*extra_defaults && (strncmp(*argv,
345
DEFAULTS_EXTRA_FILE.c_str(),
346
DEFAULTS_EXTRA_FILE.size()) == 0))
338
if (!*extra_defaults && (strncmp(*argv, "--defaults-extra-file=", sizeof("--defaults-extra-file=")) == 0))
348
*extra_defaults= *argv + DEFAULTS_EXTRA_FILE.size();
340
*extra_defaults= *argv + sizeof("--defaults-extra-file=")-1;
352
if (!*group_suffix && (strncmp(*argv,
353
DEFAULTS_GROUP_SUFFIX.c_str(),
354
DEFAULTS_GROUP_SUFFIX.size()) == 0))
344
if (!*group_suffix && (strncmp(*argv, "--defaults-group-suffix=", sizeof("--defaults-group-suffix=")) == 0))
357
*group_suffix= *argv + DEFAULTS_GROUP_SUFFIX.size();
346
*group_suffix= *argv + sizeof("--defaults-group-suffix=")-1;
400
389
DYNAMIC_ARRAY args;
391
bool found_print_defaults= 0;
402
392
uint32_t args_used= 0;
404
memory::Root alloc(512);
406
396
struct handle_option_ctx ctx;
408
398
init_default_directories();
399
init_alloc_root(&alloc,512);
410
401
Check if the user doesn't want any default option processing
411
402
--no-defaults is always the first option
415
406
/* remove the --no-defaults argument and return only the other arguments */
417
if (!(ptr=(char*) alloc.alloc_root(sizeof(alloc)+ (*argc + 1)*sizeof(char*))))
408
if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
409
(*argc + 1)*sizeof(char*))))
419
411
res= (char**) (ptr+sizeof(alloc));
420
412
memset(res,0,(*argc + 1));
448
440
Here error contains <> 0 only if we have a fully specified conf_file
449
441
or a forced default file
451
if (!(ptr=(char*) alloc.alloc_root(sizeof(alloc)+ (args.elements + *argc +1) *sizeof(char*))))
443
if (!(ptr=(char*) alloc_root(&alloc,sizeof(alloc)+
444
(args.elements + *argc +1) *sizeof(char*))))
453
446
res= (char**) (ptr+sizeof(alloc));
463
456
Check if we wan't to see the new argument list
464
457
This options must always be the last of the default options
459
if (*argc >= 2 && !strcmp(argv[0][1],"--print-defaults"))
461
found_print_defaults=1;
462
--*argc; ++*argv; /* skip argument */
467
466
memcpy(res+1+args.elements, *argv + 1, (*argc-1)*sizeof(char*));
468
467
res[args.elements+ *argc]=0; /* last null */
471
470
*argv= static_cast<char**>(res);
472
471
*(memory::Root*) ptr= alloc; /* Save alloc root for free */
473
472
delete_dynamic(&args);
473
if (found_print_defaults)
476
printf("%s would have been started with the following arguments:\n",
478
for (i=1 ; i < *argc ; i++)
479
printf("%s ", (*argv)[i]);
938
946
puts("\nThe following options may be given as the first argument:\n\
947
--print-defaults Print the program argument list and exit\n\
939
948
--no-defaults Don't read default options from any options file\n\
940
949
--defaults-file=# Only read default options from the given file #\n\
941
950
--defaults-extra-file=# Read this file after the global files are read");