@ -324,34 +324,43 @@ try_again:
int udf_get_filename ( struct super_block * sb , uint8_t * sname , uint8_t * dname ,
int flen )
{
struct ustr filename , unifilename ;
int len ;
struct ustr * filename , * unifilename ;
int len = 0 ;
if ( udf_build_ustr_exact ( & unifilename , sname , flen ) )
filename = kmalloc ( sizeof ( struct ustr ) , GFP_NOFS ) ;
if ( ! filename )
return 0 ;
unifilename = kmalloc ( sizeof ( struct ustr ) , GFP_NOFS ) ;
if ( ! unifilename )
goto out1 ;
if ( udf_build_ustr_exact ( unifilename , sname , flen ) )
goto out2 ;
if ( UDF_QUERY_FLAG ( sb , UDF_FLAG_UTF8 ) ) {
if ( ! udf_CS0toUTF8 ( & filename , & unifilename ) ) {
if ( ! udf_CS0toUTF8 ( filename , unifilename ) ) {
udf_debug ( " Failed in udf_get_filename: sname = %s \n " ,
sname ) ;
return 0 ;
goto out2 ;
}
} else if ( UDF_QUERY_FLAG ( sb , UDF_FLAG_NLS_MAP ) ) {
if ( ! udf_CS0toNLS ( UDF_SB ( sb ) - > s_nls_map , & filename ,
& unifilename ) ) {
if ( ! udf_CS0toNLS ( UDF_SB ( sb ) - > s_nls_map , filename ,
unifilename ) ) {
udf_debug ( " Failed in udf_get_filename: sname = %s \n " ,
sname ) ;
return 0 ;
goto out2 ;
}
} else
return 0 ;
len = udf_translate_to_linux ( dname , filename . u_name , filename . u_len ,
unifilename . u_name , unifilename . u_len ) ;
if ( len )
return len ;
return 0 ;
goto out2 ;
len = udf_translate_to_linux ( dname , filename - > u_name , filename - > u_len ,
unifilename - > u_name , unifilename - > u_len ) ;
out2 :
kfree ( unifilename ) ;
out1 :
kfree ( filename ) ;
return len ;
}
int udf_put_filename ( struct super_block * sb , const uint8_t * sname ,