--- Begin Message ---
Subject: |
bindat-pack returns unibyte string for emacs 22 but multibyte string for emacs 23 |
Date: |
Fri, 3 Apr 2009 23:20:56 +0800 |
Hi,
This piece of code returned nil on emacs 22 and t on emacs 23.
(let* ((spec `((:method-id vec 4)))
(data `((:ref-type . ,(vector #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x39))
(:method-id . ,(vector #x09 #x90 #xec #xd8))))
(packed (bindat-pack spec data)))
(multibyte-string-p packed))
And because of it being multibyte, when i want to send it over the
wire to a sub process in a binary data format, it gets transformed and
the sub process does not get a byte-by-byte equivalent of the
concatenation of the 2 vectors above. I have tried using
string-as-unibyte and the effect is still the same.
--
Cheers,
Phuah Yee Keat
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#2878: Acknowledgement (bindat-pack returns unibyte string for emacs 22 but multibyte string for emacs 23) |
Date: |
Sun, 03 May 2009 21:18:02 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.0.91 (gnu/linux) |
Miles Bader <miles@gnu.org> writes:
> I think it should be checked in. I don't have intimate familiarity
> with this code, but I did look at the problem and make the patch.
>
> The other code in the file stores numerical values into the
> `bindat-raw' using aset, and then wants to return the whole thing as a
> unicode string containing those byte values. The old code made a
> vector, stored into it, and turned the vector into a string using
> `concat' -- however that ends up making a _multibyte_ string (I don't
> know whether this is a bug in concat or not). The new method of
> making a string initially and storing directly into it results in a
> unibyte string, which is what is desired (this method is also more
> efficient).
OK, I've checked in your fix. Thanks.
--- End Message ---