master/foe_request.c
changeset 2589 2b9c78543663
parent 1975 8e173dddd183
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
    56  */
    56  */
    57 void ec_foe_request_init(
    57 void ec_foe_request_init(
    58         ec_foe_request_t *req, /**< FoE request. */
    58         ec_foe_request_t *req, /**< FoE request. */
    59         uint8_t* file_name /** filename */)
    59         uint8_t* file_name /** filename */)
    60 {
    60 {
       
    61     INIT_LIST_HEAD(&req->list);
    61     req->buffer = NULL;
    62     req->buffer = NULL;
    62     req->file_name = file_name;
    63     req->file_name = file_name;
    63     req->buffer_size = 0;
    64     req->buffer_size = 0;
    64     req->data_size = 0;
    65     req->data_size = 0;
    65     req->dir = EC_DIR_INVALID;
    66     req->dir = EC_DIR_INVALID;
   100 
   101 
   101 /*****************************************************************************/
   102 /*****************************************************************************/
   102 
   103 
   103 /** Pre-allocates the data memory.
   104 /** Pre-allocates the data memory.
   104  *
   105  *
   105  * If the \a buffer_size is already bigger than \a size, nothing is done.
   106  * If the internal \a buffer_size is already bigger than \a size, nothing is
       
   107  * done.
       
   108  *
       
   109  * \return Zero on success, otherwise a negative error code.
   106  */
   110  */
   107 int ec_foe_request_alloc(
   111 int ec_foe_request_alloc(
   108         ec_foe_request_t *req, /**< FoE request. */
   112         ec_foe_request_t *req, /**< FoE request. */
   109         size_t size /**< Data size to allocate. */
   113         size_t size /**< Data size to allocate. */
   110         )
   114         )
   111 {
   115 {
   112     if (size <= req->buffer_size)
   116     if (size <= req->buffer_size) {
   113         return 0;
   117         return 0;
       
   118     }
   114 
   119 
   115     ec_foe_request_clear_data(req);
   120     ec_foe_request_clear_data(req);
   116 
   121 
   117     if (!(req->buffer = (uint8_t *) kmalloc(size, GFP_KERNEL))) {
   122     if (!(req->buffer = (uint8_t *) kmalloc(size, GFP_KERNEL))) {
   118         EC_ERR("Failed to allocate %zu bytes of FoE memory.\n", size);
   123         EC_ERR("Failed to allocate %zu bytes of FoE memory.\n", size);
   119         return -1;
   124         return -ENOMEM;
   120     }
   125     }
   121 
   126 
   122     req->buffer_size = size;
   127     req->buffer_size = size;
   123     req->data_size = 0;
   128     req->data_size = 0;
   124     return 0;
   129     return 0;
   127 /*****************************************************************************/
   132 /*****************************************************************************/
   128 
   133 
   129 /** Copies FoE data from an external source.
   134 /** Copies FoE data from an external source.
   130  *
   135  *
   131  * If the \a buffer_size is to small, new memory is allocated.
   136  * If the \a buffer_size is to small, new memory is allocated.
       
   137  *
       
   138  * \return Zero on success, otherwise a negative error code.
   132  */
   139  */
   133 int ec_foe_request_copy_data(
   140 int ec_foe_request_copy_data(
   134         ec_foe_request_t *req, /**< FoE request. */
   141         ec_foe_request_t *req, /**< FoE request. */
   135         const uint8_t *source, /**< Source data. */
   142         const uint8_t *source, /**< Source data. */
   136         size_t size /**< Number of bytes in \a source. */
   143         size_t size /**< Number of bytes in \a source. */
   137         )
   144         )
   138 {
   145 {
   139     if (ec_foe_request_alloc(req, size))
   146     int ret;
   140         return -1;
   147 
       
   148     ret = ec_foe_request_alloc(req, size);
       
   149     if (ret) {
       
   150         return ret;
       
   151     }
   141 
   152 
   142     memcpy(req->buffer, source, size);
   153     memcpy(req->buffer, source, size);
   143     req->data_size = size;
   154     req->data_size = size;
   144     return 0;
   155     return 0;
   145 }
   156 }