Подпись файла librsync без файловых дескрипторов
Я пытаюсь сделать подпись файла с помощью librsync и использовать его во внутренней логике программы. В librsync.h я вижу следующее объявление:
rs_result rs_sig_file(FILE *old_file, FILE *sig_file, size_t new_block_len,
size_t strong_len,
rs_magic_number sig_magic,
rs_stats_t *stats)
Это означает, что я должен написать подпись на диске. Но rdiff_backup использует librsync за питоном и позволяет держать подпись как объект питона.
_librsync_new_sigmaker(PyObject* self, PyObject* args)
{
_librsync_SigMakerObject* sm;
long blocklen;
if (!PyArg_ParseTuple(args, "l:new_sigmaker", &blocklen))
return NULL;
sm = PyObject_New(_librsync_SigMakerObject, &_librsync_SigMakerType);
if (sm == NULL) return NULL;
sm->x_attr = NULL;
sm->sig_job = rs_sig_begin((size_t)blocklen,
(size_t)RS_DEFAULT_STRONG_LEN);
return (PyObject*)sm;
}
Файловый дескриптор исходного файла, из которого мы хотим взять знак, очевидно взят из объекта python. Мне нужно понять, как заставить функцию C работать таким образом, взять только дескриптор входного файла и вернуть некоторую структуру с подписью.