tags 449554 patch user [EMAIL PROTECTED] usertags 449554 origin-ubuntu ubuntu-patch hardy thanks
The attached patch uses a new facility provided by man-db 2.5.1 to recode manual pages to UTF-8 while reading them. This allows the man kio slave's rendering code to work regardless of the source encoding of the manual page, without it having to have lots of logic duplicated from man-db to figure this out. This facility is specific to man-db, and so at present not suitable for upstream (without some kind of run-time logic to figure out whether the facility is available). See also: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=440420 https://bugs.launchpad.net/ubuntu/+source/kdebase/+bug/44548 Thanks, -- Colin Watson [EMAIL PROTECTED]
diff -Nru kdebase-3.5.8.dfsg.1.orig/debian/control.in kdebase-3.5.8.dfsg.1/debian/control.in --- kdebase-3.5.8.dfsg.1.orig/debian/control.in 2008-02-11 10:45:39.000000000 +0000 +++ kdebase-3.5.8.dfsg.1/debian/control.in 2008-02-11 10:52:06.000000000 +0000 @@ -174,7 +174,7 @@ Package: kdebase-kio-plugins Section: kde Architecture: any -Depends: ${shlibs:Depends}, libsasl2-modules, psmisc, kdeeject +Depends: ${shlibs:Depends}, libsasl2-modules, psmisc, kdeeject, man-db (>= 2.5.1-1) Recommends: hal, pmount, kamera, kdemultimedia-kio-plugins Suggests: khelpcenter, mtools Conflicts: kdebase-libs (<< 4:3.0.0) diff -Nru kdebase-3.5.8.dfsg.1.orig/debian/patches/71_kio_man_utf8.diff kdebase-3.5.8.dfsg.1/debian/patches/71_kio_man_utf8.diff --- kdebase-3.5.8.dfsg.1.orig/debian/patches/71_kio_man_utf8.diff 1970-01-01 01:00:00.000000000 +0100 +++ kdebase-3.5.8.dfsg.1/debian/patches/71_kio_man_utf8.diff 2008-02-11 10:44:54.000000000 +0000 @@ -0,0 +1,64 @@ +diff -Nur -x '*.orig' -x '*~' kdebase-3.5.8/kioslave/man/kio_man.cpp kdebase-3.5.8.new/kioslave/man/kio_man.cpp +--- kdebase-3.5.8/kioslave/man/kio_man.cpp 2007-10-08 10:51:22.000000000 +0100 ++++ kdebase-3.5.8.new/kioslave/man/kio_man.cpp 2008-01-31 09:04:58.000000000 +0000 +@@ -517,6 +517,11 @@ + myStdStream += QString::fromLocal8Bit(s, len); + } + ++void MANProtocol::slotGetStdOutputUtf8(KProcess* /* p */, char *s, int len) ++{ ++ myStdStream += QString::fromUtf8(s, len); ++} ++ + char *MANProtocol::readManPage(const char *_filename) + { + QCString filename = _filename; +@@ -564,24 +569,20 @@ + } + lastdir = filename.left(filename.findRev('/')); + +- QIODevice *fd= KFilterDev::deviceForFile(filename); +- +- if ( !fd || !fd->open(IO_ReadOnly)) +- { +- delete fd; +- return 0; +- } +- QByteArray array(fd->readAll()); +- kdDebug(7107) << "read " << array.size() << endl; +- fd->close(); +- delete fd; +- +- if (array.isEmpty()) +- return 0; +- +- const int len = array.size(); ++ myStdStream = QString::null; ++ KProcess proc; ++ /* TODO: detect availability of 'man --recode' so that this can go ++ * upstream */ ++ proc << "man" << "--recode" << "UTF-8" << filename; ++ ++ QApplication::connect(&proc, SIGNAL(receivedStdout (KProcess *, char *, int)), ++ this, SLOT(slotGetStdOutputUtf8(KProcess *, char *, int))); ++ proc.start(KProcess::Block, KProcess::All); ++ ++ const QCString cstr=myStdStream.utf8(); ++ const int len = cstr.size()-1; + buf = new char[len + 4]; +- qmemmove(buf + 1, array.data(), len); ++ qmemmove(buf + 1, cstr.data(), len); + buf[0]=buf[len]='\n'; // Start and end with a end of line + buf[len+1]=buf[len+2]='\0'; // Two NUL characters at end + } +diff -Nur -x '*.orig' -x '*~' kdebase-3.5.8/kioslave/man/kio_man.h kdebase-3.5.8.new/kioslave/man/kio_man.h +--- kdebase-3.5.8/kioslave/man/kio_man.h 2005-10-10 16:04:01.000000000 +0100 ++++ kdebase-3.5.8.new/kioslave/man/kio_man.h 2008-01-31 12:44:49.000000000 +0000 +@@ -61,6 +61,7 @@ + + private slots: + void slotGetStdOutput(KProcess*, char*, int); ++ void slotGetStdOutputUtf8(KProcess*, char*, int); + + private: + void checkManPaths();