Change usbg_get_gadget_strs() and usbg_get_gadget_attrs() to return usbg_error instead of NULL pointer. Signed-off-by: Krzysztof Opasiak <k.opasiak@xxxxxxxxxxx> --- include/usbg/usbg.h | 10 ++++------ src/usbg.c | 43 ++++++++++++++++++++++--------------------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/include/usbg/usbg.h b/include/usbg/usbg.h index 3ad98b6..6855833 100644 --- a/include/usbg/usbg.h +++ b/include/usbg/usbg.h @@ -291,10 +291,9 @@ extern int usbg_set_gadget_attrs(usbg_gadget *g, * @brief Get the USB gadget strings * @param g Pointer to gadget * @param g_attrs Structure to be filled - * @retur Pointer to filled structure or NULL if error occurred. + * @return 0 on success usbg_error if error occurred */ -extern usbg_gadget_attrs *usbg_get_gadget_attrs(usbg_gadget *g, - usbg_gadget_attrs *g_attrs); +extern int usbg_get_gadget_attrs(usbg_gadget *g, usbg_gadget_attrs *g_attrs); /** * @brief Get gadget name length @@ -386,10 +385,9 @@ extern int usbg_set_gadget_device_bcd_usb(usbg_gadget *g, uint16_t bcdUSB); * @param g Pointer to gadget * @param lang Language of strings * @param g_sttrs Structure to be filled - * @retur Pointer to filled structure or NULL if error occurred or - * if no strings for given language. + * @return 0 on success usbg_error if error occurred */ -extern usbg_gadget_strs *usbg_get_gadget_strs(usbg_gadget *g, int lang, +extern int usbg_get_gadget_strs(usbg_gadget *g, int lang, usbg_gadget_strs *g_strs); /** diff --git a/src/usbg.c b/src/usbg.c index f9f5ec8..2d67bd6 100644 --- a/src/usbg.c +++ b/src/usbg.c @@ -617,9 +617,10 @@ out: return ret; } -static usbg_gadget_strs *usbg_parse_strings(char *path, char *name, int lang, +static int usbg_parse_gadget_strs(char *path, char *name, int lang, usbg_gadget_strs *g_strs) { + int ret; DIR *dir; char spath[USBG_MAX_PATH_LENGTH]; @@ -629,14 +630,23 @@ static usbg_gadget_strs *usbg_parse_strings(char *path, char *name, int lang, dir = opendir(spath); if (dir) { closedir(dir); - usbg_read_string(spath, "", "serialnumber", g_strs->str_ser); - usbg_read_string(spath, "", "manufacturer", g_strs->str_mnf); - usbg_read_string(spath, "", "product", g_strs->str_prd); + ret = usbg_read_string(spath, "", "serialnumber", g_strs->str_ser); + if (ret != USBG_SUCCESS) + goto out; + + ret = usbg_read_string(spath, "", "manufacturer", g_strs->str_mnf); + if (ret != USBG_SUCCESS) + goto out; + + ret = usbg_read_string(spath, "", "product", g_strs->str_prd); + if (ret != USBG_SUCCESS) + goto out; } else { - g_strs = NULL; + ret = usbg_translate_error(errno); } - return g_strs; +out: + return ret; } static inline int usbg_parse_gadget(char *path, char *name, usbg_state *parent, @@ -928,15 +938,10 @@ int usbg_create_gadget(usbg_state *s, char *name, return ret; } -usbg_gadget_attrs *usbg_get_gadget_attrs(usbg_gadget *g, - usbg_gadget_attrs *g_attrs) +int usbg_get_gadget_attrs(usbg_gadget *g, usbg_gadget_attrs *g_attrs) { - if (g && g_attrs) - usbg_parse_gadget_attrs(g->path, g->name, g_attrs); - else - g_attrs = NULL; - - return g_attrs; + return g && g_attrs ? usbg_parse_gadget_attrs(g->path, g->name, g_attrs) + : USBG_ERROR_INVALID_PARAM; } size_t usbg_get_gadget_name_len(usbg_gadget *g) @@ -1066,15 +1071,11 @@ int usbg_set_gadget_device_bcd_usb(usbg_gadget *g, uint16_t bcdUSB) : USBG_ERROR_INVALID_PARAM; } -usbg_gadget_strs *usbg_get_gadget_strs(usbg_gadget *g, int lang, +int usbg_get_gadget_strs(usbg_gadget *g, int lang, usbg_gadget_strs *g_strs) { - if (g && g_strs) - g_strs = usbg_parse_strings(g->path, g->name, lang, g_strs); - else - g_strs = NULL; - - return g_strs; + return g && g_strs ? usbg_parse_gadget_strs(g->path, g->name, lang, + g_strs) : USBG_ERROR_INVALID_PARAM; } static int usbg_check_dir(char *path) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html