Skip to content

Commit f7a3080

Browse files
committed
ASoC: apple: aop: Simply C string handling for snd identifiers
Signed-off-by: Janne Grunau <j@jannau.net>
1 parent ba4dec2 commit f7a3080

1 file changed

Lines changed: 14 additions & 36 deletions

File tree

sound/soc/apple/aop_audio.rs

Lines changed: 14 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -439,9 +439,7 @@ impl SndSocAopData {
439439
struct SndSocAopDriver(*mut bindings::snd_card);
440440

441441
fn copy_str(target: &mut [u8], source: &[u8]) {
442-
for i in 0..source.len() {
443-
target[i] = source[i];
444-
}
442+
target[..source.len()].copy_from_slice(source)
445443
}
446444

447445
unsafe fn dmaengine_slave_config(
@@ -613,47 +611,28 @@ impl SndSocAopDriver {
613611
.property_read::<CString>(c_str!("apple,machine-kind"))
614612
.required_by(&data.dev)?;
615613
unsafe {
616-
let name = b"aop_audio\0";
617-
let target = (*this.0).driver.as_mut();
618-
copy_str(target, name.as_ref());
614+
copy_str(&mut (*this.0).driver, c"aop_audio".to_bytes_with_nul());
619615
}
616+
let id_str = CString::try_from_fmt(fmt!("Apple{}HPAI", *chassis))?;
620617
unsafe {
621-
let prefix = b"Apple";
622-
let target = (*this.0).id.as_mut();
623-
copy_str(target, prefix.as_ref());
624-
let mut ptr = prefix.len();
625-
copy_str(&mut target[ptr..], chassis.to_bytes_with_nul());
626-
ptr += chassis.count_bytes();
627-
let suffix = b"HPAI\0";
628-
copy_str(&mut target[ptr..], suffix);
618+
copy_str(&mut (*this.0).id, id_str.to_bytes_with_nul());
629619
}
630-
let longname_suffix = b"High-Power Audio Interface\0";
631-
let mut machine_name = KVec::with_capacity(
632-
chassis.count_bytes() + 2 + machine_kind.count_bytes() + longname_suffix.len(),
633-
GFP_KERNEL,
634-
)?;
635-
machine_name.extend_from_slice(machine_kind.to_bytes_with_nul(), GFP_KERNEL)?;
636-
let last_item = machine_name.len() - 1;
637-
machine_name[last_item] = b' ';
638-
machine_name.extend_from_slice(chassis.to_bytes_with_nul(), GFP_KERNEL)?;
639-
let last_item = machine_name.len() - 1;
640-
machine_name[last_item] = b' ';
620+
let shortname = CString::try_from_fmt(fmt!("{} {} HPAI", *machine_kind, *chassis))?;
641621
unsafe {
642-
let target = (*this.0).shortname.as_mut();
643-
copy_str(target, machine_name.as_ref());
644-
let ptr = machine_name.len();
645-
let suffix = b"HPAI\0";
646-
copy_str(&mut target[ptr..], suffix);
622+
copy_str(&mut (*this.0).shortname, shortname.to_bytes_with_nul());
647623
}
648-
machine_name.extend_from_slice(longname_suffix, GFP_KERNEL)?;
624+
let longname = CString::try_from_fmt(fmt!(
625+
"{} {} High-Power Audio Interface",
626+
*machine_kind,
627+
*chassis
628+
))?;
649629
unsafe {
650-
let target = (*this.0).longname.as_mut();
651-
copy_str(target, machine_name.as_ref());
630+
copy_str(&mut (*this.0).longname, longname.to_bytes_with_nul());
652631
}
653632

654633
let mut pcm = ptr::null_mut();
655634
let ret =
656-
unsafe { bindings::snd_pcm_new(this.0, machine_name.as_ptr() as _, 0, 0, 1, &mut pcm) };
635+
unsafe { bindings::snd_pcm_new(this.0, longname.as_ptr() as _, 0, 0, 1, &mut pcm) };
657636
if ret < 0 {
658637
dev_err!(data.dev, "Unable to allocate PCM device");
659638
return Err(Error::from_errno(ret));
@@ -671,8 +650,7 @@ impl SndSocAopDriver {
671650
(*pcm).private_data = data.clone().into_foreign() as _;
672651
(*pcm).private_free = Some(aop_pcm_free_private);
673652
(*pcm).info_flags = 0;
674-
let name = c"aop_audio";
675-
copy_str((*pcm).name.as_mut(), name.to_bytes());
653+
copy_str(&mut (*pcm).name, c"aop_audio".to_bytes_with_nul());
676654
}
677655

678656
let ret = unsafe { bindings::snd_card_register(this.0) };

0 commit comments

Comments
 (0)