From 59a7b97b73e1ade9f94be4914fac00e9332d090b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20JH=20Pinter?= Date: Tue, 7 Jun 2011 15:52:19 -0700 Subject: [PATCH] Speeds up truncation on 4K bytesize ~40x faster, 2k bytesize ~12x faster, 1k+1 ~13x slower but speeds become comparable rapidly (around 1.1K). Speed remains pretty much constant for all data sizes. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cheers, André --- lib/syslog_protocol/packet.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/syslog_protocol/packet.rb b/lib/syslog_protocol/packet.rb index dafe833..53ecf83 100644 --- a/lib/syslog_protocol/packet.rb +++ b/lib/syslog_protocol/packet.rb @@ -12,9 +12,16 @@ def assemble raise "Could not assemble packet without hostname, tag, facility, and severity" end data = "<#{pri}>#{generate_timestamp} #{@hostname} #{@tag}: #{@content}" - while data.bytesize > 1024 - data = data[0..(data.length-2)] + + if data.bytesize > 1024 + shortened = data.unpack('c*')[0..1023].pack('c*') + re_encoded = shortened.force_encoding(data.encoding) + while !re_encoded.valid_encoding? && data.valid_encoding? # multi byte char truncation + re_encoded = re_encoded[0..(re_encoded.length - 2)] + end + data = re_encoded end + data end