Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: src/libmtp.c

Issue 11312222: Add LIBMTP_Get_File_Chunk() to read an arbitrary amount of data into memory. The existing APIs only… (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libmtp/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/libmtp.h ('k') | src/libmtp.sym » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /** 1 /**
2 * \file libmtp.c 2 * \file libmtp.c
3 * 3 *
4 * Copyright (C) 2005-2011 Linus Walleij <triad@df.lth.se> 4 * Copyright (C) 2005-2011 Linus Walleij <triad@df.lth.se>
5 * Copyright (C) 2005-2008 Richard A. Low <richard@wentnet.com> 5 * Copyright (C) 2005-2008 Richard A. Low <richard@wentnet.com>
6 * Copyright (C) 2007 Ted Bullock <tbullock@canada.com> 6 * Copyright (C) 2007 Ted Bullock <tbullock@canada.com>
7 * Copyright (C) 2007 Tero Saarni <tero.saarni@gmail.com> 7 * Copyright (C) 2007 Tero Saarni <tero.saarni@gmail.com>
8 * Copyright (C) 2008 Florent Mertens <flomertens@gmail.com> 8 * Copyright (C) 2008 Florent Mertens <flomertens@gmail.com>
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 4954 matching lines...) Expand 10 before | Expand all | Expand 10 after
4965 // This was not an OGG/FLAC file so discard it 4965 // This was not an OGG/FLAC file so discard it
4966 LIBMTP_destroy_track_t(track); 4966 LIBMTP_destroy_track_t(track);
4967 return NULL; 4967 return NULL;
4968 } 4968 }
4969 } 4969 }
4970 get_track_metadata(device, ob->oi.ObjectFormat, track); 4970 get_track_metadata(device, ob->oi.ObjectFormat, track);
4971 return track; 4971 return track;
4972 } 4972 }
4973 4973
4974 /** 4974 /**
4975 * This copies a chunk of a file off the device to memory.
4976 * @param device a pointer to the device to get the track from.
4977 * @param id the file ID of the file to retrieve.
4978 * @param offset the offset of the file to read from.
4979 * @param count the amount of data to read.
4980 * @param data a pointer to the data from the device. Must be
4981 * <coded>free()</code>:ed by the caller after use.
4982 * @param datalen the amount of data written to <code>data</code>.
4983 * @return 0 if the transfer was successful, any other value means
4984 * failure.
4985 */
4986 int LIBMTP_Get_File_Chunk(LIBMTP_mtpdevice_t* device, uint32_t id,
4987 uint32_t offset, uint32_t count,
4988 unsigned char** data, uint32_t* datalen)
4989 {
4990 uint16_t ret;
4991 PTPParams *params = (PTPParams *) device->params;
4992 PTP_USB *ptp_usb = (PTP_USB*) device->usbinfo;
4993 PTPObject *ob;
4994
4995 if (!data || !datalen) {
4996 add_error_to_errorstack(device, LIBMTP_ERROR_GENERAL, "LIBMTP_Get_File_Chunk (): Invalid parameter.");
4997 return -1;
4998 }
4999
5000 ret = ptp_object_want (params, id, PTPOBJECT_OBJECTINFO_LOADED, &ob);
Jorge Lucangeli Obes 2012/11/15 01:46:10 I'm not sure what the coding standard is for third
Lei Zhang 2012/11/15 01:50:11 This is copied from line 5158. The code in this fi
5001 if (ret != PTP_RC_OK) {
5002 add_error_to_errorstack(device, LIBMTP_ERROR_GENERAL, "LIBMTP_Get_File_Chunk (): Could not get object info.");
5003 return -1;
5004 }
5005 if (ob->oi.ObjectFormat == PTP_OFC_Association) {
5006 add_error_to_errorstack(device, LIBMTP_ERROR_GENERAL, "LIBMTP_Get_File_Chunk (): Bad object format.");
5007 return -1;
5008 }
5009
5010 ret = ptp_getpartialobject(params, id, offset, count, data, datalen);
5011
5012 if (ret == PTP_ERROR_CANCEL) {
5013 add_error_to_errorstack(device, LIBMTP_ERROR_CANCELLED, "LIBMTP_Get_File_Chu nk(): Cancelled transfer.");
5014 return -1;
5015 }
5016 if (ret != PTP_RC_OK) {
5017 add_ptp_error_to_errorstack(device, ret, "LIBMTP_Get_File_Chunk(): Could not get file from device.");
5018 return -1;
5019 }
5020
5021 return 0;
5022 }
5023
5024 /**
4975 * This is a manual conversion from MTPDataGetFunc to PTPDataGetFunc 5025 * This is a manual conversion from MTPDataGetFunc to PTPDataGetFunc
4976 * to isolate the internal type. 5026 * to isolate the internal type.
4977 */ 5027 */
4978 static uint16_t get_func_wrapper(PTPParams* params, void* priv, unsigned long wa ntlen, unsigned char *data, unsigned long *gotlen) 5028 static uint16_t get_func_wrapper(PTPParams* params, void* priv, unsigned long wa ntlen, unsigned char *data, unsigned long *gotlen)
4979 { 5029 {
4980 MTPDataHandler *handler = (MTPDataHandler *)priv; 5030 MTPDataHandler *handler = (MTPDataHandler *)priv;
4981 uint16_t ret; 5031 uint16_t ret;
4982 uint32_t local_gotlen = 0; 5032 uint32_t local_gotlen = 0;
4983 ret = handler->getfunc(params, handler->priv, wantlen, data, &local_gotlen); 5033 ret = handler->getfunc(params, handler->priv, wantlen, data, &local_gotlen);
4984 *gotlen = local_gotlen; 5034 *gotlen = local_gotlen;
(...skipping 3909 matching lines...) Expand 10 before | Expand all | Expand 10 after
8894 * @param device the device which may have a cache to which the object should be updated. 8944 * @param device the device which may have a cache to which the object should be updated.
8895 * @param object_id the object to update. 8945 * @param object_id the object to update.
8896 */ 8946 */
8897 static void update_metadata_cache(LIBMTP_mtpdevice_t *device, uint32_t object_id ) 8947 static void update_metadata_cache(LIBMTP_mtpdevice_t *device, uint32_t object_id )
8898 { 8948 {
8899 PTPParams *params = (PTPParams *)device->params; 8949 PTPParams *params = (PTPParams *)device->params;
8900 8950
8901 ptp_remove_object_from_cache(params, object_id); 8951 ptp_remove_object_from_cache(params, object_id);
8902 add_object_to_cache(device, object_id); 8952 add_object_to_cache(device, object_id);
8903 } 8953 }
OLDNEW
« no previous file with comments | « src/libmtp.h ('k') | src/libmtp.sym » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698