diff --git a/lib_xua/src/core/endpoint0/xua_endpoint0.c b/lib_xua/src/core/endpoint0/xua_endpoint0.c index 63290cb8..ee23714d 100755 --- a/lib_xua/src/core/endpoint0/xua_endpoint0.c +++ b/lib_xua/src/core/endpoint0/xua_endpoint0.c @@ -231,24 +231,15 @@ void XUA_Endpoint0_setVendorId(unsigned short vid) { } void concatenateAndCopyStrings(char* string1, char* string2, char* string_buffer) { - uint32_t string_size = MIN(strlen(string1), XUA_MAX_STR_LEN-1); - - memset(string_buffer, 0, XUA_MAX_STR_LEN); - memcpy(string_buffer, string1, string_size); - - - if (string_size==XUA_MAX_STR_LEN-1) { - string_buffer[XUA_MAX_STR_LEN-1] = '\0'; - return; - } + uint32_t remaining_buffer_size = MIN(strlen(string1), XUA_MAX_STR_LEN-1); + strncpy(string_buffer, string1, remaining_buffer_size); uint32_t total_string_size = MIN(strlen(string1)+strlen(string2), XUA_MAX_STR_LEN-1); if (total_string_size==XUA_MAX_STR_LEN-1) { - string_size = XUA_MAX_STR_LEN-1-strlen(string1); + remaining_buffer_size = XUA_MAX_STR_LEN-1-strlen(string1); } else { - string_size = strlen(string1); + remaining_buffer_size = strlen(string1); } - memcpy(string_buffer+strlen(string1), string2, string_size); - string_buffer[total_string_size] = '\0'; + strncat(string_buffer, string2, remaining_buffer_size); } void XUA_Endpoint0_setStrTable() { diff --git a/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h b/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h index 34ace801..9dcbe989 100644 --- a/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h +++ b/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h @@ -28,8 +28,22 @@ #define STR_TABLE_ENTRY(name) char * name -// XUA_DESCR_EMPTY_STRING is used in the g_strTable to set the maximum size of the table entries -#define XUA_DESCR_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +// The empty strings below are used in the g_strTable to set the maximum size of the table entries +#define XUA_VENDOR_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_PRODUCT_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_OUTPUT_INTERFACE_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_INPUT_INTERFACE_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_INPUT_TERM_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_OUTPUT_TERM_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_CLOCK_SELECTOR_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_INTERNAL_CLOCK_SELECTOR_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_SPDIF_CLOCK_SOURCE_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_ADAT_CLOCK_SOURCE_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_DFU_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_CTRL_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_MIDI_OUT_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +#define XUA_MIDI_IN_EMPTY_STRING "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + // The value below must match the length of XUA_DESCR_EMPTY_STRING. #define XUA_MAX_STR_LEN (32) @@ -322,42 +336,42 @@ typedef struct StringDescTable_t g_strTable = { .langID = "\x09\x04", /* US English */ - .vendorStr = XUA_DESCR_EMPTY_STRING,//VENDOR_STR, + .vendorStr = XUA_VENDOR_EMPTY_STRING, .serialStr = "", #if (AUDIO_CLASS == 2) - .productStr_Audio2 = XUA_DESCR_EMPTY_STRING, - .outputInterfaceStr_Audio2 = XUA_DESCR_EMPTY_STRING, - .inputInterfaceStr_Audio2 = XUA_DESCR_EMPTY_STRING, - .usbInputTermStr_Audio2 = XUA_DESCR_EMPTY_STRING, - .usbOutputTermStr_Audio2 = XUA_DESCR_EMPTY_STRING, + .productStr_Audio2 = XUA_PRODUCT_EMPTY_STRING, + .outputInterfaceStr_Audio2 = XUA_OUTPUT_INTERFACE_EMPTY_STRING, + .inputInterfaceStr_Audio2 = XUA_INPUT_INTERFACE_EMPTY_STRING, + .usbInputTermStr_Audio2 = XUA_INPUT_TERM_EMPTY_STRING, + .usbOutputTermStr_Audio2 = XUA_OUTPUT_TERM_EMPTY_STRING, #endif #if (AUDIO_CLASS_FALLBACK) || (AUDIO_CLASS == 1) - .productStr_Audio1 = XUA_DESCR_EMPTY_STRING, - .outputInterfaceStr_Audio1 = XUA_DESCR_EMPTY_STRING, - .inputInterfaceStr_Audio1 = XUA_DESCR_EMPTY_STRING, - .usbInputTermStr_Audio1 = XUA_DESCR_EMPTY_STRING, - .usbOutputTermStr_Audio1 = XUA_DESCR_EMPTY_STRING, + .productStr_Audio1 = XUA_PRODUCT_EMPTY_STRING, + .outputInterfaceStr_Audio1 = XUA_OUTPUT_INTERFACE_EMPTY_STRING, + .inputInterfaceStr_Audio1 = XUA_INPUT_INTERFACE_EMPTY_STRING, + .usbInputTermStr_Audio1 = XUA_INPUT_TERM_EMPTY_STRING, + .usbOutputTermStr_Audio1 = XUA_OUTPUT_TERM_EMPTY_STRING, #endif #if (AUDIO_CLASS == 2) - .clockSelectorStr = XUA_DESCR_EMPTY_STRING, - .internalClockSourceStr = XUA_DESCR_EMPTY_STRING, + .clockSelectorStr = XUA_CLOCK_SELECTOR_EMPTY_STRING, + .internalClockSourceStr = XUA_INTERNAL_CLOCK_SELECTOR_EMPTY_STRING, #if SPDIF_RX - .spdifClockSourceStr = XUA_DESCR_EMPTY_STRING, + .spdifClockSourceStr = XUA_SPDIF_CLOCK_SOURCE_EMPTY_STRING, #endif #if ADAT_RX - .adatClockSourceStr = XUA_DESCR_EMPTY_STRING, + .adatClockSourceStr = XUA_ADAT_CLOCK_SOURCE_EMPTY_STRING, #endif #endif #if (XUA_DFU_EN == 1) - .dfuStr = XUA_DESCR_EMPTY_STRING, + .dfuStr = XUA_DFU_EMPTY_STRING, #endif #ifdef USB_CONTROL_DESCS - .ctrlStr = XUA_DESCR_EMPTY_STRING, + .ctrlStr = XUA_CTRL_EMPTY_STRING, #endif #ifdef MIDI - .midiOutStr = XUA_DESCR_EMPTY_STRING, - .midiInStr = XUA_DESCR_EMPTY_STRING, + .midiOutStr = XUA_MIDI_OUT_EMPTY_STRING, + .midiInStr = XUA_MIDI_IN_EMPTY_STRING, #endif #include "chanstrings.h"