[solved] Dopisywanie watości do pliku konfiguracyjnego

0

Mam problem z wprowadzaniem zmian do pliku konfiguracyjnego w postaci:

author="Mateusz Mróz"
name=Intermail
version=1.1
time=180000
inboxfolderpath=/inbox
logpath=/log/maillog.log
mailboxpath=
users=

Chodzi mi przede wszystkim o wprowadzenie ścieżki za znakiem '=' w parametrze "mailboxpath=". Próbowałem dodać ścieżkę za pomocą funkcji:

int change_mailboxconf(char *dir){
   
    char *buf = (char *)malloc(512);
    char *tmp;
    FILE *inp;
    int i;
       if((inp = fopen("intermail.conf","r+b")) == NULL){
           fprintf(stderr, "Nie moge otworzyc pliku intermail.conf \n");
           return -1;
       }
      for(i = 0; (*(buf + i) = getc(inp))!= EOF; i++);
       rewind(inp);
        if((tmp = strstr(buf, "mailboxpath="))!= NULL){
            if(fseek(inp, strlen(buf)-strlen(tmp) + strlen("mailboxpath="), SEEK_SET) == -1)
                fprintf(stderr,"Bład");
            fprintf(inp,"%s", dir);
         }
    free(buf);
    return 0;
}

Jednakże jej wynik jest co najmniej niezadowalający. Zostaje skasowany łańcuch "users=" , a łańcuch - ścieżka, która jest dodawana za znakiem '=' wygląda w ten sposob:

author="Mateusz Mróz"
name=Intermail
version=1.1
time=180000
inboxfolderpath=/inbox
logpath=/log/maillog.log
mailboxpath=��߷�ĥܿ

Ścieżka, która jest parametrem funkcji jest tworzona za pomocą funkcji:

char *localyze_mailbox(void){ 
    char *dir = NULL;
    char buf[128];
    int n  = 128;
 
    dir = getcwd(buf, n);
    if(chdir("mailbox") != 0){
        printf("Plik mailbox występuje we właściwym miejscu\n");
        return NULL;
    }
        strcat(dir, "/mailbox");
        chdir("..");
        printf("%s\n", dir);
return dir;
}

Wywołanie w main() ma postać:

change_mailboxconf(localyze_mailbox());

0

Problem rozwiązałem. Zwracałem wskaźnik na zmienną lokalną, która poza funkcją nie istnieje. Zatem pod tym adresem mialem śmieci.

0

Możesz też skorzystać z obsługi plików ini.

1 użytkowników online, w tym zalogowanych: 0, gości: 1