qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] vvfat: refresh writing long filename


From: BALATON Zoltan
Subject: Re: [PATCH] vvfat: refresh writing long filename
Date: Sun, 19 Jan 2025 02:07:51 +0100 (CET)

On Sun, 19 Jan 2025, Michael Tokarev wrote:
18.01.2025 23:54, BALATON Zoltan wrote:
+typedef struct lfn_direntry_t {
+    uint8_t sequence;
+    uint8_t name01[10];
+    uint8_t attributes;
+    uint8_t direntry_type;
+    uint8_t sfn_checksum;
+    uint8_t name0e[12];
+    uint16_t begin;
+    uint8_t name1c[4];
+} QEMU_PACKED lfn_direntry_t;

+static unsigned write_lfn_part(uint8_t *dest, unsigned dsize,
+                               const gunichar2 *lptr, const gunichar2 *lend)
+{
+    unsigned i;
+    for(i = 0; i < dsize / 2 && lptr + i < lend; ++i) {
+        dest[i / 2 + 0] = lptr[i] & 0xff;
+        dest[i / 2 + 1] = lptr[i] >> 8;

Why not uint16_t and maybe cpu_to_le (or whatever that's called) if needed? May be simpler than handling it byte by byte.

The dest array is unaligned - this is, eg, name01 in the above struct.
Will it work to use entry->name01[i] = cpu_to_le16(lptr[i]) here,
provided lfn_direntry_t=>name is declared as uint16_t name[5] ?

I think it should work, I don't see why it would not. The compiler should be able to figure out how to handle unaligned data where needed, you should not need to do that by hand. Or I think you'd get a warning if it would not work.

Regards,
BALATON Zoltan

I haven't done programming for quite a while... ;)

/mjt


reply via email to

[Prev in Thread] Current Thread [Next in Thread]