Exemple #1
0
static int ptpfs_open(struct inode *ino, struct file *filp)
{
    //printk(KERN_INFO "%s   flags: %X\n",  __FUNCTION__, filp->f_flags);
    struct ptp_data_buffer *data=(struct ptp_data_buffer*)kmalloc(sizeof(struct ptp_data_buffer), GFP_KERNEL);
    int retval;
    memset(data,0,sizeof(struct ptp_data_buffer));


    switch (filp->f_flags & O_ACCMODE)
    {
    case O_RDWR:
        return -EFAULT;
    case O_RDONLY:
        retval = ptp_getobject(PTPFSSB(ino->i_sb),ino->i_ino,data);
        if (retval == PTP_RC_OK)
        {
            filp->private_data = data;
            return 0;
        }
        break;
    case O_WRONLY:
        filp->private_data = data;
        return 0;
    }

    kfree(data);
    return -EFAULT;
}
Exemple #2
0
/**
 * Gets a MTP object from the device.
 * 
 * @param device a pointer to the device.
 * @param handle the handle of the object.
 * @param p_meta a metadata structure to create for the object.
 *  Dynamically allocated.
 * @param p_data a pointer to the data to recieve.
 *  Dynamically allocated.
 */
void VitaMTP_GetObject(LIBMTP_mtpdevice_t *device, uint32_t handle, metadata_t** p_meta, unsigned char** p_data){
    MTPProperties* props = NULL;
    int nProps = 0;
    int i = 0;
    unsigned char* data = NULL;
    metadata_t* meta = NULL;
    
    VitaMTP_GetObjectPropList(device, handle, &props, &nProps);
    ptp_getobject((PTPParams*)device->params, handle, &data);
    
    meta = (metadata_t*)malloc(sizeof(metadata_t));
    memset(meta, 0x0, sizeof(metadata_t));
    for(i=0; i<nProps; i++){
        // [u16]property [u16]datatype [u32]handle data
        if(props[i].property == PTP_OPC_ObjectFormat){
            if(props[i].propval.u16 == PTP_OFC_Association){
                meta->dataType = Folder;
            }else{
                meta->dataType = File;
            }
        }
        if(meta->dataType == File){
            if(props[i].property == PTP_OPC_ObjectSize){
                meta->size = props[i].propval.u64;
            }
        }
        if(props[i].property == PTP_OPC_ObjectFileName){
            meta->title = malloc(strlen(props[i].propval.str)+1);
            meta->data.file.name = malloc(strlen(props[i].propval.str)+1);
            strcpy(meta->title, props[i].propval.str);
            strcpy(meta->data.file.name, props[i].propval.str);
            if(strchr(meta->title, '.')){
                strchr(meta->title, '.')[0] = 0x0;
            }
        }
        if(props[i].property == PTP_OPC_DateModified){
            meta->dateTimeCreated = ptp_unpack_MTPTime(props[i].propval.str);
        }
    }
    
    free(props);
    *p_meta = meta;
    *p_data = data;
}