@@ -1782,7 +1782,7 @@ int tape_set_cart_coherency(struct device_data *dev, const tape_partition_t part
17821782 /* APPLICATION CLIENT SPECIFIC INFORMATION LENGTH */
17831783 coh_data [30 ] = 0 ; /* Size of APPLICATION CLIENT SPECIFIC INFORMATION (Byte 1) */
17841784 coh_data [31 ] = 43 ; /* Size of APPLICATION CLIENT SPECIFIC INFORMATION (Byte 0) */
1785- arch_strcpy_auto ((char * )coh_data + 32 , "LTFS" );
1785+ arch_strcpy ((char * )coh_data + 32 , 5 , "LTFS" );
17861786 memcpy (coh_data + 37 , coh -> uuid , 37 );
17871787 /*
17881788 Version field
@@ -3075,86 +3075,128 @@ void set_tape_attribute(struct ltfs_volume *vol, struct tape_attr *t_attr)
30753075 * @param set attribute type
30763076 * @return 0 positive : success, negative : cannot set value to Cartridge Memory
30773077 */
3078- int tape_set_attribute_to_cm (struct device_data * dev , struct tape_attr * t_attr , int type )
3078+ int tape_set_attribute_to_cm (struct device_data * dev ,
3079+ struct tape_attr * t_attr ,
3080+ int type )
30793081{
3080-
30813082 int ret ;
30823083 int attr_size ;
30833084 uint8_t format ;
3085+ unsigned char * attr_data = NULL ;
3086+ unsigned char * data ;
3087+ size_t len ;
30843088
30853089 CHECK_ARG_NULL (dev , - LTFS_NULL_ARG );
30863090 CHECK_ARG_NULL (t_attr , - LTFS_NULL_ARG );
30873091
3088- if ( type == TC_MAM_APP_VENDER ) {
3092+ switch (type ) {
3093+ case TC_MAM_APP_VENDER :
30893094 attr_size = TC_MAM_APP_VENDER_SIZE ;
30903095 format = ASCII_FORMAT ;
3091- } else if ( type == TC_MAM_APP_NAME ) {
3096+ break ;
3097+ case TC_MAM_APP_NAME :
30923098 attr_size = TC_MAM_APP_NAME_SIZE ;
30933099 format = ASCII_FORMAT ;
3094- } else if ( type == TC_MAM_APP_VERSION ) {
3100+ break ;
3101+ case TC_MAM_APP_VERSION :
30953102 attr_size = TC_MAM_APP_VERSION_SIZE ;
30963103 format = ASCII_FORMAT ;
3097- } else if ( type == TC_MAM_USER_MEDIUM_LABEL ) {
3104+ break ;
3105+ case TC_MAM_USER_MEDIUM_LABEL :
30983106 attr_size = TC_MAM_USER_MEDIUM_LABEL_SIZE ;
30993107 format = TEXT_FORMAT ;
3100- } else if ( type == TC_MAM_TEXT_LOCALIZATION_IDENTIFIER ) {
3108+ break ;
3109+ case TC_MAM_TEXT_LOCALIZATION_IDENTIFIER :
31013110 attr_size = TC_MAM_TEXT_LOCALIZATION_IDENTIFIER_SIZE ;
31023111 format = BINARY_FORMAT ;
3103- } else if ( type == TC_MAM_BARCODE ) {
3112+ break ;
3113+ case TC_MAM_BARCODE :
31043114 attr_size = TC_MAM_BARCODE_SIZE ;
31053115 format = ASCII_FORMAT ;
3106- } else if ( type == TC_MAM_APP_FORMAT_VERSION ) {
3116+ break ;
3117+ case TC_MAM_APP_FORMAT_VERSION :
31073118 attr_size = TC_MAM_APP_FORMAT_VERSION_SIZE ;
31083119 format = ASCII_FORMAT ;
3109- } else if ( type == TC_MAM_LOCKED_MAM ) {
3120+ break ;
3121+ case TC_MAM_LOCKED_MAM :
31103122 attr_size = TC_MAM_LOCKED_MAM_SIZE ;
31113123 format = BINARY_FORMAT ;
3112- } else if ( type == TC_MAM_MEDIA_POOL ) {
3124+ break ;
3125+ case TC_MAM_MEDIA_POOL :
31133126 attr_size = TC_MAM_MEDIA_POOL_SIZE ;
31143127 format = TEXT_FORMAT ;
3115- } else {
3128+ break ;
3129+ default :
31163130 ltfsmsg (LTFS_WARN , 17204W , type , "tape_set_attribute_to_cm" );
31173131 return -1 ;
31183132 }
31193133
3120- unsigned char * attr_data = NULL ;
3121- attr_data = (unsigned char * )malloc (sizeof (unsigned char * )* (attr_size + TC_MAM_PAGE_HEADER_SIZE ));
3122- if (attr_data == NULL ) return - LTFS_NO_MEMORY ;
3123- ltfs_u16tobe (attr_data , type ); /* set attribute type */
3134+ attr_data = calloc (1 , attr_size + TC_MAM_PAGE_HEADER_SIZE );
3135+ if (!attr_data )
3136+ return - LTFS_NO_MEMORY ;
3137+
3138+ ltfs_u16tobe (attr_data , type ); /* set attribute type */
31243139 attr_data [2 ] = format ; /* set data format type */
31253140 ltfs_u16tobe (attr_data + 3 , attr_size ); /* set data size */
31263141
3142+ data = attr_data + TC_MAM_PAGE_HEADER_SIZE ;
3143+
31273144 /* set attribute data */
3128- if ( type == TC_MAM_APP_VENDER ) {
3129- arch_strncpy ((char * )attr_data + 5 , t_attr -> vender , attr_size + TC_MAM_PAGE_HEADER_SIZE , attr_size );
3130- } else if ( type == TC_MAM_APP_NAME ) {
3131- arch_strncpy ((char * )attr_data + 5 , t_attr -> app_name , attr_size + TC_MAM_PAGE_HEADER_SIZE , attr_size );
3132- } else if ( type == TC_MAM_APP_VERSION ) {
3133- arch_strncpy ((char * )attr_data + 5 , t_attr -> app_ver , attr_size + TC_MAM_PAGE_HEADER_SIZE , attr_size );
3134- } else if ( type == TC_MAM_USER_MEDIUM_LABEL ) {
3135- arch_strncpy ((char * )attr_data + 5 , t_attr -> medium_label , attr_size + TC_MAM_PAGE_HEADER_SIZE , attr_size );
3136- } else if ( type == TC_MAM_TEXT_LOCALIZATION_IDENTIFIER ) {
3137- attr_data [5 ] = t_attr -> tli ;
3138- } else if ( type == TC_MAM_BARCODE ) {
3139- arch_strncpy ((char * )attr_data + 5 , t_attr -> barcode , attr_size + TC_MAM_PAGE_HEADER_SIZE , attr_size );
3140- } else if ( type == TC_MAM_APP_FORMAT_VERSION ) {
3141- arch_strncpy ((char * )attr_data + 5 , t_attr -> app_format_ver , attr_size + TC_MAM_PAGE_HEADER_SIZE , attr_size );
3142- } else if ( type == TC_MAM_LOCKED_MAM ) {
3143- attr_data [5 ] = t_attr -> vollock ;
3144- } else if ( type == TC_MAM_MEDIA_POOL ) {
3145- arch_strncpy ((char * )attr_data + 5 , t_attr -> media_pool , attr_size + TC_MAM_PAGE_HEADER_SIZE , attr_size );
3145+ switch (type ) {
3146+ case TC_MAM_APP_VENDER :
3147+ len = strnlen (t_attr -> vender , attr_size );
3148+ memcpy (data , t_attr -> vender , len );
3149+ break ;
3150+
3151+ case TC_MAM_APP_NAME :
3152+ len = strnlen (t_attr -> app_name , attr_size );
3153+ memcpy (data , t_attr -> app_name , len );
3154+ break ;
3155+
3156+ case TC_MAM_APP_VERSION :
3157+ len = strnlen (t_attr -> app_ver , attr_size );
3158+ memcpy (data , t_attr -> app_ver , len );
3159+ break ;
3160+
3161+ case TC_MAM_USER_MEDIUM_LABEL :
3162+ len = strnlen (t_attr -> medium_label , attr_size );
3163+ memcpy (data , t_attr -> medium_label , len );
3164+ break ;
3165+
3166+ case TC_MAM_TEXT_LOCALIZATION_IDENTIFIER :
3167+ data [0 ] = t_attr -> tli ;
3168+ break ;
3169+
3170+ case TC_MAM_BARCODE :
3171+ len = strnlen (t_attr -> barcode , attr_size );
3172+ memcpy (data , t_attr -> barcode , len );
3173+ break ;
3174+
3175+ case TC_MAM_APP_FORMAT_VERSION :
3176+ len = strnlen (t_attr -> app_format_ver , attr_size );
3177+ memcpy (data , t_attr -> app_format_ver , len );
3178+ break ;
3179+
3180+ case TC_MAM_LOCKED_MAM :
3181+ data [0 ] = t_attr -> vollock ;
3182+ break ;
3183+
3184+ case TC_MAM_MEDIA_POOL :
3185+ len = strnlen (t_attr -> media_pool , attr_size );
3186+ memcpy (data , t_attr -> media_pool , len );
3187+ break ;
31463188 }
31473189
31483190 ret = dev -> backend -> write_attribute (dev -> backend_data ,
3149- 0 , /* partition */
3150- attr_data ,
3151- ( attr_size + TC_MAM_PAGE_HEADER_SIZE ) );
3191+ 0 , /* partition */
3192+ attr_data ,
3193+ attr_size + TC_MAM_PAGE_HEADER_SIZE );
31523194
31533195 if (ret < 0 )
31543196 ltfsmsg (LTFS_ERR , 17205E , type , "tape_set_attribute_to_cm" );
3197+
31553198 free (attr_data );
31563199 return ret ;
3157-
31583200}
31593201
31603202/**
@@ -3232,12 +3274,13 @@ int tape_get_attribute_from_cm(struct device_data *dev, struct tape_attr *t_attr
32323274{
32333275 int ret ;
32343276 int attr_len ;
3277+ unsigned char * attr_data = NULL ;
32353278
32363279 CHECK_ARG_NULL (dev , - LTFS_NULL_ARG );
32373280 CHECK_ARG_NULL (t_attr , - LTFS_NULL_ARG );
32383281
32393282 switch (type ) {
3240- case TC_MAM_APP_VENDER :
3283+ case TC_MAM_APP_VENDER :
32413284 attr_len = TC_MAM_APP_VENDER_SIZE ;
32423285 break ;
32433286 case TC_MAM_APP_NAME :
@@ -3270,14 +3313,14 @@ int tape_get_attribute_from_cm(struct device_data *dev, struct tape_attr *t_attr
32703313 break ;
32713314 }
32723315
3273- unsigned char * attr_data = NULL ;
3274- attr_data = malloc ( sizeof ( char * ) * ( attr_len + TC_MAM_PAGE_HEADER_SIZE ) );
3275- if (attr_data == NULL ) return - LTFS_NO_MEMORY ;
3316+ int attr_size = sizeof ( char ) * ( attr_len + TC_MAM_PAGE_HEADER_SIZE ) ;
3317+ attr_data = ( unsigned char * )malloc ( attr_size );
3318+ if (! attr_data ) return - LTFS_NO_MEMORY ;
32763319 ret = dev -> backend -> read_attribute (dev -> backend_data ,
3277- 0 , /* partition */
3278- type ,
3279- attr_data ,
3280- sizeof ( attr_data ) );
3320+ 0 , /* partition */
3321+ type ,
3322+ attr_data ,
3323+ attr_size );
32813324
32823325 if (ret == 0 ) {
32833326 uint16_t id = ltfs_betou16 (attr_data );
@@ -3486,10 +3529,10 @@ int update_tape_attribute(struct ltfs_volume *vol, const char *new_value, int ty
34863529 if (ret < 0 ) {
34873530 if ( type == TC_MAM_USER_MEDIUM_LABEL ) {
34883531 memset (vol -> t_attr -> medium_label , '\0' , TC_MAM_USER_MEDIUM_LABEL_SIZE + 1 );
3489- arch_strncpy_auto (vol -> t_attr -> medium_label , pre_attr , strlen ( pre_attr ) );
3532+ arch_strcpy_auto (vol -> t_attr -> medium_label , pre_attr );
34903533 } else if (type == TC_MAM_BARCODE ) {
34913534 memset (vol -> t_attr -> barcode , '\0' , TC_MAM_BARCODE_SIZE + 1 );
3492- arch_strncpy_auto (vol -> t_attr -> barcode , pre_attr , strlen ( pre_attr ) );
3535+ arch_strcpy_auto (vol -> t_attr -> barcode , pre_attr );
34933536 }
34943537 }
34953538
0 commit comments