Subject: bug#2878 closed by Chong Yidong <[email-masked]> (Re: bug#2878: Acknowledgement (bindat-pack returns unibyte string for emacs 22 but multibyte string for emacs 23))

From: [email-masked] (Emacs bug Tracking System)
Date: Mon, 04 May 2009 01:25:04 +0000

This is an automatic notification regarding your bug report
which was filed against the emacs package:

#2878: bindat-pack returns unibyte string for emacs 22 but multibyte string  for emacs 23

It has been closed by Chong Yidong <[email-masked]>.

Their explanation is attached below along with your original report.
If this explanation is unsatisfactory and you have not received a
better one in a separate message then please contact Chong Yidong <[email-masked]> by
replying to this email.

-- 
2878: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=2878
Emacs Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#2878: Acknowledgement (bindat-pack returns unibyte string for emacs 22 but multibyte string for emacs 23)
From: Chong Yidong <[email-masked]>
To: Miles Bader <[email-masked]>
Cc: Yee Keat Phuah <[email-masked]>, [email-masked]
Date: Sun, 03 May 2009 21:18:02 -0400

Miles Bader <[email-masked]> 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.

Subject: bindat-pack returns unibyte string for emacs 22 but multibyte string for emacs 23
From: Yee Keat Phuah <[email-masked]>
To: [email-masked]
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