Setting each of attribute may fail due to a lot of reasons
so those functions should report this failure to a user.

Signed-off-by: Krzysztof Opasiak <k.opas...@samsung.com>
---
 include/usbg/usbg.h |   33 +++++++++++++-------
 src/usbg.c          |   85 +++++++++++++++++++++++++++++++++------------------
 2 files changed, 77 insertions(+), 41 deletions(-)

diff --git a/include/usbg/usbg.h b/include/usbg/usbg.h
index f6f7a2e..17084bb 100644
--- a/include/usbg/usbg.h
+++ b/include/usbg/usbg.h
@@ -314,62 +314,70 @@ extern int usbg_get_gadget_name(usbg_gadget *g, char 
*buf, size_t len);
  * @brief Set the USB gadget vendor id
  * @param g Pointer to gadget
  * @param idVendor USB device vendor id
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_vendor_id(usbg_gadget *g, uint16_t idVendor);
+extern int usbg_set_gadget_vendor_id(usbg_gadget *g, uint16_t idVendor);
 
 /**
  * @brief Set the USB gadget product id
  * @param g Pointer to gadget
  * @param idProduct USB device product id
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_product_id(usbg_gadget *g, uint16_t idProduct);
+extern int usbg_set_gadget_product_id(usbg_gadget *g, uint16_t idProduct);
 
 /**
  * @brief Set the USB gadget device class code
  * @param g Pointer to gadget
  * @param bDeviceClass USB device class code
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_device_class(usbg_gadget *g,
+extern int usbg_set_gadget_device_class(usbg_gadget *g,
                uint8_t bDeviceClass);
 
 /**
  * @brief Set the USB gadget protocol code
  * @param g Pointer to gadget
  * @param bDeviceProtocol USB protocol code
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_device_protocol(usbg_gadget *g,
+extern int usbg_set_gadget_device_protocol(usbg_gadget *g,
                uint8_t bDeviceProtocol);
 
 /**
  * @brief Set the USB gadget device subclass code
  * @param g Pointer to gadget
  * @param bDeviceSubClass USB device subclass code
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_device_subclass(usbg_gadget *g,
+extern int usbg_set_gadget_device_subclass(usbg_gadget *g,
                uint8_t bDeviceSubClass);
 
 /**
  * @brief Set the maximum packet size for a gadget
  * @param g Pointer to gadget
  * @param bMaxPacketSize0 Maximum packet size
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_device_max_packet(usbg_gadget *g,
+extern int usbg_set_gadget_device_max_packet(usbg_gadget *g,
                uint8_t bMaxPacketSize0);
 
 /**
  * @brief Set the gadget device BCD release number
  * @param g Pointer to gadget
  * @param bcdDevice BCD release number
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_device_bcd_device(usbg_gadget *g,
+extern int usbg_set_gadget_device_bcd_device(usbg_gadget *g,
                uint16_t bcdDevice);
 
 /**
  * @brief Set the gadget device BCD USB version
  * @param g Pointer to gadget
  * @param bcdUSB BCD USB version
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_device_bcd_usb(usbg_gadget *g, uint16_t bcdUSB);
+extern int usbg_set_gadget_device_bcd_usb(usbg_gadget *g, uint16_t bcdUSB);
 
 /**
  * @brief Get the USB gadget strings
@@ -397,24 +405,27 @@ extern int usbg_set_gadget_strs(usbg_gadget *g, int lang,
  * @param g Pointer to gadget
  * @param lang USB language ID
  * @param ser Serial number
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_serial_number(usbg_gadget *g, int lang, char *ser);
+extern int usbg_set_gadget_serial_number(usbg_gadget *g, int lang, char *ser);
 
 /**
  * @brief Set the manufacturer name for a gadget
  * @param g Pointer to gadget
  * @param lang USB language ID
  * @param mnf Manufacturer
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_manufacturer(usbg_gadget *g, int lang, char *mnf);
+extern int usbg_set_gadget_manufacturer(usbg_gadget *g, int lang, char *mnf);
 
 /**
  * @brief Set the product name for a gadget
  * @param g Pointer to gadget
  * @param lang USB language ID
  * @param prd Product
+ * @return 0 on success usbg_error if error occurred
  */
-extern void usbg_set_gadget_product(usbg_gadget *g, int lang, char *prd);
+extern int usbg_set_gadget_product(usbg_gadget *g, int lang, char *prd);
 
 /* USB function allocation and configuration */
 
diff --git a/src/usbg.c b/src/usbg.c
index ed8070d..5a4202c 100644
--- a/src/usbg.c
+++ b/src/usbg.c
@@ -1012,44 +1012,52 @@ out:
        return ret;
 }
 
-void usbg_set_gadget_vendor_id(usbg_gadget *g, uint16_t idVendor)
+int usbg_set_gadget_vendor_id(usbg_gadget *g, uint16_t idVendor)
 {
-       usbg_write_hex16(g->path, g->name, "idVendor", idVendor);
+       return g ? usbg_write_hex16(g->path, g->name, "idVendor", idVendor)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
-void usbg_set_gadget_product_id(usbg_gadget *g, uint16_t idProduct)
+int usbg_set_gadget_product_id(usbg_gadget *g, uint16_t idProduct)
 {
-       usbg_write_hex16(g->path, g->name, "idProduct", idProduct);
+       return g ? usbg_write_hex16(g->path, g->name, "idProduct", idProduct)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
-void usbg_set_gadget_device_class(usbg_gadget *g, uint8_t bDeviceClass)
+int usbg_set_gadget_device_class(usbg_gadget *g, uint8_t bDeviceClass)
 {
-       usbg_write_hex8(g->path, g->name, "bDeviceClass", bDeviceClass);
+       return g ? usbg_write_hex8(g->path, g->name, "bDeviceClass", 
bDeviceClass)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
-void usbg_set_gadget_device_protocol(usbg_gadget *g, uint8_t bDeviceProtocol)
+int usbg_set_gadget_device_protocol(usbg_gadget *g, uint8_t bDeviceProtocol)
 {
-       usbg_write_hex8(g->path, g->name, "bDeviceProtocol", bDeviceProtocol);
+       return g ? usbg_write_hex8(g->path, g->name, "bDeviceProtocol", 
bDeviceProtocol)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
-void usbg_set_gadget_device_subclass(usbg_gadget *g, uint8_t bDeviceSubClass)
+int usbg_set_gadget_device_subclass(usbg_gadget *g, uint8_t bDeviceSubClass)
 {
-       usbg_write_hex8(g->path, g->name, "bDeviceSubClass", bDeviceSubClass);
+       return g ? usbg_write_hex8(g->path, g->name, "bDeviceSubClass", 
bDeviceSubClass)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
-void usbg_set_gadget_device_max_packet(usbg_gadget *g, uint8_t bMaxPacketSize0)
+int usbg_set_gadget_device_max_packet(usbg_gadget *g, uint8_t bMaxPacketSize0)
 {
-       usbg_write_hex8(g->path, g->name, "bMaxPacketSize0", bMaxPacketSize0);
+       return g ? usbg_write_hex8(g->path, g->name, "bMaxPacketSize0", 
bMaxPacketSize0)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
-void usbg_set_gadget_device_bcd_device(usbg_gadget *g, uint16_t bcdDevice)
+int usbg_set_gadget_device_bcd_device(usbg_gadget *g, uint16_t bcdDevice)
 {
-       usbg_write_hex16(g->path, g->name, "bcdDevice", bcdDevice);
+       return g ? usbg_write_hex16(g->path, g->name, "bcdDevice", bcdDevice)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
-void usbg_set_gadget_device_bcd_usb(usbg_gadget *g, uint16_t bcdUSB)
+int usbg_set_gadget_device_bcd_usb(usbg_gadget *g, uint16_t bcdUSB)
 {
-       usbg_write_hex16(g->path, g->name, "bcdUSB", bcdUSB);
+       return g ? usbg_write_hex16(g->path, g->name, "bcdUSB", bcdUSB)
+                       : USBG_ERROR_INVALID_PARAM;
 }
 
 usbg_gadget_strs *usbg_get_gadget_strs(usbg_gadget *g, int lang,
@@ -1082,8 +1090,10 @@ int usbg_set_gadget_strs(usbg_gadget *g, int lang,
                usbg_gadget_strs *g_strs)
 {
        char path[USBG_MAX_PATH_LENGTH];
-       DIR *dir;
-       int ret = USBG_SUCCESS;
+       int ret = USBG_ERROR_INVALID_PARAM;
+
+       if (!g || !g_strs)
+               goto out;
 
        sprintf(path, "%s/%s/%s/0x%x", g->path, g->name, STRINGS_DIR, lang);
 
@@ -1104,37 +1114,52 @@ out:
        return ret;
 }
 
-void usbg_set_gadget_serial_number(usbg_gadget *g, int lang, char *serno)
+int usbg_set_gadget_serial_number(usbg_gadget *g, int lang, char *serno)
 {
        char path[USBG_MAX_PATH_LENGTH];
+       int ret = USBG_ERROR_INVALID_PARAM;
 
-       sprintf(path, "%s/%s/%s/0x%x", g->path, g->name, STRINGS_DIR, lang);
+       if (g && serno) {
+               sprintf(path, "%s/%s/%s/0x%x", g->path, g->name, STRINGS_DIR, 
lang);
 
-       mkdir(path, S_IRWXU|S_IRWXG|S_IRWXO);
+               ret = usbg_check_dir(path);
+               if (ret == USBG_SUCCESS)
+                       ret = usbg_write_string(path, "", "serialnumber", 
serno);
+       }
 
-       usbg_write_string(path, "", "serialnumber", serno);
+       return ret;
 }
 
-void usbg_set_gadget_manufacturer(usbg_gadget *g, int lang, char *mnf)
+int usbg_set_gadget_manufacturer(usbg_gadget *g, int lang, char *mnf)
 {
        char path[USBG_MAX_PATH_LENGTH];
+       int ret = USBG_ERROR_INVALID_PARAM;
 
-       sprintf(path, "%s/%s/%s/0x%x", g->path, g->name, STRINGS_DIR, lang);
+       if (g && mnf) {
+               sprintf(path, "%s/%s/%s/0x%x", g->path, g->name, STRINGS_DIR, 
lang);
 
-       mkdir(path, S_IRWXU|S_IRWXG|S_IRWXO);
+               ret = usbg_check_dir(path);
+               if (ret == USBG_SUCCESS)
+                       ret = usbg_write_string(path, "", "manufacturer", mnf);
+       }
 
-       usbg_write_string(path, "", "manufacturer", mnf);
+       return ret;
 }
 
-void usbg_set_gadget_product(usbg_gadget *g, int lang, char *prd)
+int usbg_set_gadget_product(usbg_gadget *g, int lang, char *prd)
 {
        char path[USBG_MAX_PATH_LENGTH];
+       int ret = USBG_ERROR_INVALID_PARAM;
 
-       sprintf(path, "%s/%s/%s/0x%x", g->path, g->name, STRINGS_DIR, lang);
+       if (g && prd) {
+               sprintf(path, "%s/%s/%s/0x%x", g->path, g->name, STRINGS_DIR, 
lang);
 
-       mkdir(path, S_IRWXU|S_IRWXG|S_IRWXO);
+               ret = usbg_check_dir(path);
+               if (ret == USBG_SUCCESS)
+                       ret = usbg_write_string(path, "", "product", prd);
+       }
 
-       usbg_write_string(path, "", "product", prd);
+       return ret;
 }
 
 usbg_function *usbg_create_function(usbg_gadget *g, usbg_function_type type,
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to