From: James J. <me...@do...> - 2022-01-16 22:13:19
|
Hello, I am trying to implement object copy into this library using Linux pipes. Since objects cannot be copied to except downloaded to a file and read back into an MTP file, which will take a lot of time. I played around pipes instead by concurrently writing to pipe and reading from pipe back to another MTP file. But I read that MTP is not multiplexed, so operations cannot be performed concurrently. I have tried to implement this but I am getting some weird error. Because I assumed each transaction waits for the current to finish. This is what I have: > int LIBMTP__Copy_Object(LIBMTP_mtpdevice_t *src_device, > uint32_t const src_id, > LIBMTP_mtpdevice_t *dest_device, > LIBMTP_file_t *dest_file, > LIBMTP_progressfunc_t const callback, > void const * const data) > { > int fildes[2]; > > if (pipe(fildes) == -1) { > add_error_to_errorstack(src_device, LIBMTP_ERROR_GENERAL, "_LIBMTP_Copy_Object(): Could not create pipe."); > return -1; > } > > if (fork() == 0) { > uint16_t ret = LIBMTP_Send_File_From_File_Descriptor(dest_device, fildes[0], dest_file, callback, data); > close(fildes[0]); > if (ret == -1) { > add_ptp_error_to_errorstack(dest_device, ret, "_LIBMTP_Copy_Object(): could not write to destination object."); > return -1; > } > } else { > uint16_t ret = LIBMTP_Get_File_To_File_Descriptor(src_device, src_id, fildes[1], callback, data); > close(fildes[1]); > if (ret == -1) { > add_ptp_error_to_errorstack(src_device, ret, "_LIBMTP_Copy_Object(): could not copy object."); > return -1; > } > } > > return 0; > } I need a help in finding why it LIBMTP_Send_File_From_File_Descriptoris not working. Or it can't work because it is not multiplexed? A bit of a newbie here, still getting familiar with this library and the whole low-level thing. It's for the passion :) Thank you James |