unixODBC的SYSTEM_FILE_PATH

unixODBC中,SYSTEM_FILE_PATH定义了像odbc.iniodbcinst.ini这些系统文件存放的位置。默认情况下,是在“/usr/local/etc”这个文件夹下。我们看一下用到SYSTEM_FILE_PATH的地方。

(1)odbcinst_system_file_path

char *odbcinst_system_file_path( char *buffer )
{
    char *path;
    static char save_path[ 512 ];
    static int saved = 0;

    if ( saved ) {
        return save_path;
    }

    if (( path = getenv( "ODBCSYSINI" ))) {
        strcpy( buffer, path );
    strcpy( save_path, buffer );
    saved = 1;
        return buffer;
    }
#ifdef SYSTEM_FILE_PATH
    else {
    strcpy( save_path, SYSTEM_FILE_PATH );
    saved = 1;
        return SYSTEM_FILE_PATH;
    }
#else
    else {
    strcpy( save_path, "/etc" );
    saved = 1;
        return "/etc";
    }
#endif
}

可以看到在查找系统文件路径时,首先会看ODBCSYSINI这个环境变量有没有赋值,如果有,以这个变量定义的值为准,否则如果SYSTEM_FILE_PATH定义了,则用SYSTEM_FILE_PATH。最后才考虑使用“/etc”。

(2)odbc_configmain函数:

int main( int argc, char **argv )
{
    ......
    else if ( strcmp( argv[ i ], "--odbcini" ) == 0 )
    {
        printf( "%s/odbc.ini\n", SYSTEM_FILE_PATH );
    }
    else if ( strcmp( argv[ i ], "--odbcinstini" ) == 0 )
    {
        printf( "%s/odbcinst.ini\n", SYSTEM_FILE_PATH );
    }
    ......
}

可以看到,在使用odbc_config程序获得odbc.iniodbcinst.ini文件位置时,也要用的SYSTEM_FILE_PATH