in installer/myodbc-installer.cc [782:918]
int main(int argc, char **argv)
{
char *arg;
int i;
SQLINTEGER convlen;
/* minimum number of args to do anything useful */
if (argc < 3)
{
if (argc == 2)
{
arg= argv[1]; /* check for help option */
if (*arg == '-' && *(arg + 1) == ACTION_HELP)
{
main_usage(stdout);
return 1;
}
}
fprintf(stderr, "[ERROR] Not enough arguments given\n");
main_usage(stderr);
return 1;
}
/* parse args */
for(i= 1; i < argc; ++i)
{
arg= argv[i];
if (*arg == '-')
arg++;
/* we should be left with a single character option (except scope)
* all strings are skipped by the respective option below */
if (*arg != OPT_SCOPE && *(arg + 1))
{
fprintf(stderr, "[ERROR] Invalid command line option: %s\n", arg);
return 1;
}
switch (*arg)
{
case OBJ_DRIVER:
case OBJ_DATASOURCE:
/* make sure we haven't already assigned the object */
if (obj)
{
object_usage();
return 1;
}
obj= *arg;
break;
case ACTION_LIST:
case ACTION_ADD:
case ACTION_REMOVE:
if (action)
{
action_usage();
return 1;
}
action= *arg;
break;
case OPT_DSN:
if (i + 1 == argc || *argv[i + 1] == '-')
{
fprintf(stderr, "[ERROR] Missing name\n");
return 1;
}
name= argv[++i];
break;
case OPT_ATTR:
if (i + 1 == argc || *argv[i + 1] == '-')
{
fprintf(stderr, "[ERROR] Missing attribute string\n");
return 1;
}
attrstr= argv[++i];
break;
case OPT_SCOPE:
/* convert to integer */
scope= *(++arg) - '0';
if (scope > 2 || *(arg + 1) /* another char exists */)
{
fprintf(stderr, "[ERROR] Invalid scope: %s\n", arg);
return 1;
}
break;
case ACTION_HELP:
/* print usage if -h is given anywhere */
main_usage(stdout);
return 1;
default:
fprintf(stderr, "[ERROR] Invalid command line option: %s\n", arg);
return 1;
}
}
if (!action)
{
action_usage();
return 1;
}
/* init libmysqlclient */
my_sys_init();
utf8_charset_info= myodbc::get_charset_by_csname(transport_charset, MYF(MY_CS_PRIMARY),
MYF(0));
/* convert to SQLWCHAR for installer API */
convlen= SQL_NTS;
if (name && !(wname= sqlchar_as_sqlwchar(myodbc::default_charset_info,
(SQLCHAR *)name, &convlen, NULL)))
{
fprintf(stderr, "[ERROR] Name is invalid\n");
return 1;
}
convlen= SQL_NTS;
if (attrstr && !(wattrs= sqlchar_as_sqlwchar(myodbc::default_charset_info,
(SQLCHAR *)attrstr, &convlen,
NULL)))
{
fprintf(stderr, "[ERROR] Attribute string is invalid\n");
return 1;
}
/* handle appropriate action */
switch (obj)
{
case OBJ_DRIVER:
return handle_driver_action();
case OBJ_DATASOURCE:
return handle_datasource_action();
default:
object_usage();
return 1;
}
}