[Linux-programlama] GLib Key value parser

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

From: Aykut KOÇAK (aykutkocak@superonline.com)
Date: Mon 20 Jun 2005 - 16:20:50 EEST


Herkese Merhaba

Birkaç gündür aşağıda verdiğim satırlar ile uğraşıyorum. Bir türlü işin
içinden çıkamadım.
fonksiyonun sonundaki "g_key_file_free( key_file );" fonksiyonu iki
adres için "free(): Invalid pointer xxx" mesajı veriyor. Programda bu
yüzden oluştuğunu zannettiğim bir stabilite sorunu var. Bu modülü tüm
kod içinde iptal ettiğimde hiç bir sorun kalmıyor. Ayrıca aynı kod diğer
modüllerde aynı şekilde kullanılıyor ve hiç bir problem çıkartmıyor.
Herhalde sorunu ben göremiyorum. Glib kütüpanesi kullananlardan yardım
bekliyorum. Umarım birilerinin böyle bir deneyimi vardır.

Yardımlarınız için şimdiden teşekkürler.

Aykut KOÇAK

kod parçası:
______________________________

int logger_init( const char* filename )
{
    GKeyFile *key_file;
    static GError *err=NULL;
    int sta;
    char* key;

    key_file = g_key_file_new();
    sta = g_key_file_load_from_file( key_file, filename,
G_KEY_FILE_NONE, NULL );

    if ( sta == TRUE )
    {

        if ( g_key_file_has_group ( key_file, "LOGGER") == TRUE )
        {
            if ( ( key = g_key_file_get_string( key_file, "LOGGER",
"LoggerFolder", &err) ) != NULL )
            {
                strncpy( LoggerFolder, key, 256 );
            }
            else
            {
                strcpy( LoggerFolder, "/usr/local/clown/logger" );
                fprintf( stderr, "ERROR: %s\n", err->message );
            }
            if ( ( key = g_key_file_get_string( key_file, "LOGGER",
"LoggerFileFormat", &err) ) != NULL )
            {
                strncpy( LoggerFileFormat, key, 256 );
            }
            else
            {
                strcpy( LoggerFileFormat, "CLOWN" ); //
                fprintf( stderr, "ERROR: %s\n", err->message );
            }
            if ( ( key = g_key_file_get_value( key_file, "LOGGER",
"LoggerPeriod", &err) ) != NULL )
            {
                LoggerPeriod = atol( key );
            }
            else
            {
                LoggerPeriod = 1000;
                fprintf( stderr, "ERROR: %s\n", err->message );
            }
            if ( ( key = g_key_file_get_value( key_file, "LOGGER",
"LoggerSize", &err) ) != NULL )
            {
                LoggerSize = atol( key );
            }
            else
            {
                LoggerSize = DEFAULT_LOGGER_SIZE;
                fprintf( stderr, "ERROR: %s\n", err->message );
            }
        }
        logger_thread_unlock(); //init
        fprintf( stderr," Starting Logger Thread\n\n " );
        pthread_create( &logger_thread, NULL, (void
*)logger_thread_call, logger );
    }
    g_key_file_free( key_file );

    return sta;
}

Okunan INI dosyası:
______________________

[LOGGER]
LoggerPeriod=5000
LoggerSize=1024
LoggerFileFormat=CLOWN
LoggerFolder=/usr/local/clown/logger

_______________________________________________
Linux-programlama mailing list
Linux-programlama@liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.