Ошибка сегментации - при использовании библиотеки librsync

У меня есть два базовых файла filea.txt а также fileb.txt, Попытка создать подпись, а затем дельта с использованием подписи и fileb.txtзатем патч filea.txt с этой дельтой. В результате содержимое файла должно быть таким же, как fileb.txt

Первая часть создает файл подписи из filea.txt:

#include <stdlib.h>
#include <stdio.h>
#include "librsync.h"

int main(){
    FILE *fpa;
    fpa = fopen("filea.txt","r");

    FILE *fps;
    fps = fopen("sig.sig","w+");


    rs_result res = rs_sig_file(fpa, fps, 1,2,NULL);

    fclose(fpa);
    fclose(fps);

    printf("Result code: %d\n", res);

    return 0;
}

Тогда второй должен использовать эту подпись с fileb.txt файл для создания дельта-файла

#include <stdlib.h>
#include <stdio.h>
#include "librsync.h"


int main(){
    FILE *fpb;
    fpb = fopen("fileb.txt", "r");

    FILE *fpd;
    fpd = fopen("delta.delt","w+");

    FILE *sigFile;
    sigFile = fopen("sig.sig","r");

    rs_signature_t *signature;

    rs_loadsig_file(sigFile, &signature, NULL);

    rs_result res = rs_delta_file(signature, fpb, fpd, NULL);

    printf("Result: %d", res);

    fclose(fpb); fclose(fpd); fclose(sigFile);

    return 0;
}

Я собираю их обоих как этот gcc -o delta create_delta.c -Wall -g -lrsync

Но вторая часть дает ошибку ошибки сегментации.

Возможно из-за этого третий исполняемый файл выдает пустой файл:

int main() {
    FILE *fpd;
    fpd = fopen("delta.delt", "r");

    FILE *fpa;
    fpa = fopen("filea.txt", "r");

    FILE *fpn;
    fpn = fopen("file_new.txt", "w+");

    rs_patch_file(fpa, fpd, fpn, NULL);

    fclose(fpd); fclose(fpa); fclose(fpn);

    return 0;
}

ОБНОВЛЕНИЕ Попытка проверки файловых указателей на null после того, как fopen не уловил никаких ошибок.

1 ответ

Решение

Посмотрев на https://rproxy.samba.org/doxygen/librsync/rsync_h.html я понял, что вы должны использовать

rs_build_hash_table(подпись)

перед звонком

rs_delta_file(подпись, fpb, fpd, NULL);

Работает нормально для меня тогда.

Другие вопросы по тегам