udf: Remove struct ustr as non-needed intermediate storage
Although 'struct ustr' tries to structurize the data by combining the string and its length, it doesn't actually make much benefit, since it saves only one parameter, but introduces an extra copying of the whole buffer, serving as an intermediate storage. It looks quite inefficient and not actually needed. This commit gets rid of the struct ustr by changing the parameters of some functions appropriately. Also, it removes using 'dstring' type, since it doesn't make much sense too. Just using the occasion, add a 'const' qualifier to udf_get_filename to make consistent parameters sets. Signed-off-by: Andrew Gabbasov <andrew_gabbasov@mentor.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:

committed by
Jan Kara

parent
066b9cded0
commit
9293fcfbc1
@@ -887,18 +887,14 @@ static int udf_find_fileset(struct super_block *sb,
|
||||
static int udf_load_pvoldesc(struct super_block *sb, sector_t block)
|
||||
{
|
||||
struct primaryVolDesc *pvoldesc;
|
||||
struct ustr *instr, *outstr;
|
||||
uint8_t *outstr;
|
||||
struct buffer_head *bh;
|
||||
uint16_t ident;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
instr = kmalloc(sizeof(struct ustr), GFP_NOFS);
|
||||
if (!instr)
|
||||
return -ENOMEM;
|
||||
|
||||
outstr = kmalloc(sizeof(struct ustr), GFP_NOFS);
|
||||
outstr = kmalloc(128, GFP_NOFS);
|
||||
if (!outstr)
|
||||
goto out1;
|
||||
return -ENOMEM;
|
||||
|
||||
bh = udf_read_tagged(sb, block, block, &ident);
|
||||
if (!bh) {
|
||||
@@ -923,31 +919,25 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block)
|
||||
#endif
|
||||
}
|
||||
|
||||
if (!udf_build_ustr(instr, pvoldesc->volIdent, 32)) {
|
||||
ret = udf_CS0toUTF8(outstr, instr);
|
||||
if (ret < 0)
|
||||
goto out_bh;
|
||||
ret = udf_CS0toUTF8(outstr, 31, pvoldesc->volIdent, 32);
|
||||
if (ret < 0)
|
||||
goto out_bh;
|
||||
|
||||
strncpy(UDF_SB(sb)->s_volume_ident, outstr->u_name,
|
||||
outstr->u_len > 31 ? 31 : outstr->u_len);
|
||||
udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident);
|
||||
}
|
||||
strncpy(UDF_SB(sb)->s_volume_ident, outstr, ret);
|
||||
udf_debug("volIdent[] = '%s'\n", UDF_SB(sb)->s_volume_ident);
|
||||
|
||||
if (!udf_build_ustr(instr, pvoldesc->volSetIdent, 128)) {
|
||||
ret = udf_CS0toUTF8(outstr, instr);
|
||||
if (ret < 0)
|
||||
goto out_bh;
|
||||
ret = udf_CS0toUTF8(outstr, 127, pvoldesc->volSetIdent, 128);
|
||||
if (ret < 0)
|
||||
goto out_bh;
|
||||
|
||||
udf_debug("volSetIdent[] = '%s'\n", outstr->u_name);
|
||||
}
|
||||
outstr[ret] = 0;
|
||||
udf_debug("volSetIdent[] = '%s'\n", outstr);
|
||||
|
||||
ret = 0;
|
||||
out_bh:
|
||||
brelse(bh);
|
||||
out2:
|
||||
kfree(outstr);
|
||||
out1:
|
||||
kfree(instr);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user