LINUX.ORG.RU

Новая версия AA патча для Fluxbox.


0

0

Некоторое время назад я выпустил патч для Fluxbox (>= 0.9.8), позволяющий использовать сглаживание шрифтов в не-UTF (т.е. KOI8-R ;) локали. С ним была маленькая, но неприятная проблема - если стиль использовал тени у текста, то тень не перекодировалась (как выяснилось перекодировалась дважды). Наконец у меня дошли руки это профиксить и выпустить вторую версию.

>>> Подробности

★★★★★

Проверено: l-xoid ()

у тебя там мемори лик, кто будет освобождать память после стрдапа? прошлый патч помню правил, а то флукс разрастался как свинья, да забыл исправления отдать. исправь. делов на две строчки

luc
()
Ответ на: комментарий от luc

а подробнее можно,где исправить?
а то там одни strdupы

anonymous
()

Предпочитаю КДЕ, но приятно тусоваться на одном форуме с человеком вносящим вклад в развитие ОпенСоурс (во как сказал!) :)))

veent ★★
()
Ответ на: комментарий от anonymous

постепенно добавится и в этом месте :)

luc
()

Конечно никоим образом не принижая достоинств автора, наоборот мегакланяясь за неоценимый вклад в ОпСо, НО... в любом же учебнике по С написано буквально следующее "Функция strdup возвращает указатель на новую строку, являющуюся копией аргумента. Память для новой строки выделяется с помощью malloc и должна быть освобождена с помощью free." Ну товарищи, ну нельзя же так... потом красноглазики на каждом углу пищат "ОпСо гавно".

anonymous
()
Ответ на: комментарий от anonymous

Так, ну воперывх я поправил и во втором месте. А вот насчет "любого учебника по С" могу сказать что во время написания тех функций я очень активно программил на яве (в колледже у нас обязаловка), а ко всему хорошему, вроде grabage collector, слишком быстро привеыкаешь, вот и делаешь такие дурацкие ляпы :( Спасибо, что показали на ошибку.

svyatogor ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>> потом красноглазики на каждом углу пищат "ОпСо гавно".

Опенсорс и есть говно. А красноглазики - это как раз те кто пишет это говно. Данный strdup это подтверждает.

Ron
()
Ответ на: комментарий от Ron

>> потом красноглазики на каждом углу пищат "ОпСо гавно".

> Опенсорс и есть говно. А красноглазики - это как раз те кто пишет это > говно. Данный strdup это подтверждает.

К сожалению, слишком часто это является правдой.

Взять, к примеру, тот же boost::spirit. На поверности - крутая опенсорсная библиотека, а внутре - красноглазо-кулхацкерхская поделка криворуких пионеров.

Хорошо написал по теме JWZ: http://www.jwz.org/doc/linuxvideo.html.

Да что далеко ходить, G++ - полное багов говно (как и большинство того, к чему приложил руку RMS).

faustus
()
Ответ на: комментарий от faustus

>Хорошо написал по теме JWZ: http://www.jwz.org/doc/linuxvideo.html.

Я сам часто сталкивался с разными проблемами в линуксе. Но все они были решаемы.

Я не хочу сказать, что у человека, написАвшего эту статью руки из... Нет, мне кажется он просто неудачник. Он просто обозленное трепло.

anonymous
()
Ответ на: комментарий от faustus

>Взять, к примеру, тот же boost::spirit. На поверности - крутая опенсорсная библиотека, а внутре - красноглазо-кулхацкерхская поделка криворуких пионеров.

Ну так то, что на поверхности и нужно. Зачем внутрь-то лазить? :)

А если серьезно, то что там не так? Я писал парсер заголовков HTTP на boost::spirit, вроде полет нормальный (если не считать гигансткое время компиляции).

WFrag ★★★★
()
Ответ на: комментарий от WFrag

>Взять, к примеру, тот же boost::spirit. На поверности - крутая >опенсорсная библиотека, а внутре - красноглазо-кулхацкерхская >поделка криворуких пионеров.

Хех, слава Богу M$ людей кодом не пугает. Не видишь и спишь спокойно? :)

>Опсос гавно.

>Красноглазик.

Своей подписью ты все сказал. Сходи к окулисту, глядишь глаза прочистят, может и руки вправят.

anonymous
()
Ответ на: комментарий от anonymous

> Своей подписью ты все сказал. Сходи к окулисту, глядишь глаза прочистят, может и руки вправят. Гы. Это ему к костоправу надо :-)

x86 ★★
()
Ответ на: комментарий от anonymous

нафига strdup в C++'-ном коде?

Цель этого патча -- более чем сомнительна, и собственно код -- еще тот шедевр. Из серии "физик на любом языке будет писать на FORTRAN'-е"

Dselect ★★★
()

Я не понял, это типа C++ такой? :)

Возвращать char* в C++ после strdup - за это руки надо отрывать! А если исключение случится? А если забудешь освоболить?

Ведь надежных вариантов уйма!

Можно использовать std::string, правда с ним нельзя работать как с сырой строкой C. В этом случае он скорее всего будет не очень удобен.

Можно использовать std::vector<char> (для него гарантируется, что все элементы занимают непрерывный участок памяти). Наверное, самы простой вариант. Минус - труднее обойтись без копирования при возврате (не все компиляторы сообразят соптимизировать).

Ну или на худой конец std::auto_ptr<char> (хотя у него есть тонкости с владением объекта, но если просто возвращать его из функции проблем не будет). Тут копирование строчки посложнее будет (в два этапа вместо strdup, сначала new, потом std::copy)

И после этого еще говорят, что C++ отстой и тормозит. Просто на нем писать надо уметь!

P.S. В коде специально не разбирался, может какую тонкость не заметил? :) P.P.S. Опен-сурс, блин :(

WFrag ★★★★
()
Ответ на: комментарий от faustus

про g++

> Да что далеко ходить, G++ - полное багов говно

Оно-то говно, только остальные -- еще хуже, и за них хотят денег.

Dselect ★★★
()
Ответ на: нафига strdup в C++'-ном коде? от Dselect

Для самых умных: Напиши лучше, подскажи как лучше, поправь, не можешь, не вякай попусту.

Постоянно так, гавно, гавно, а написть лучше не могут.

А автору спасибо, он хоть делает для себя, да еще и вам отдает, а не просто так воздух сотрясает.

anonymous
()
Ответ на: комментарий от Dselect

>Зачем? Уже написано до меня: тсндартный ответ.

>Don't comment or patch bad code; rewrite it. (TM) согласен, но срать на работу автора от этого не стоит.

anonymous
()

хе-хе, а чо - сделал бы чтоп буквы русские а тени - аглицкие
прикольно было б :-)

anonymous
()
Ответ на: комментарий от Ron

>Можно. Если осторожно. :-)

Я имел в виду что нет гарантии того, что элементы строки std::string расположены в непрерывном куске памяти. Т.е может быть, что &str[i+1] != &str[i]+1, поэтому в качестве буфера для функции C она не подойдет. А вот с std::vector<char> таких проблем нет и его можно использовать таким образом:

extern "C" void someCFunc(char* buf);

...
std::vector<char> buf(100);
someCFunc(&buf[0]);
...

При этом возложив все заботы по управлению памятью на std::vector.

WFrag ★★★★
()

Хватит ругать за (немного)кривоватый код. Сходите на улицу отрвитесь: поправьте скамейку, закрасьте плохие надписи на заборах, снимите кошку с дерева, накапайте на самогонщицу. Люди вас спасибо скажут за исправление нашей общей улицы :)

Selecter ★★★★
()
Ответ на: комментарий от Selecter

> ... накапайте на самогонщицу ...

Тебя бы Павликом назвать :)

ansi ★★★★
()
Ответ на: комментарий от WFrag

2WFrag: А вот если бы ты внимательно посмотрел бы код, то увидел бы, что он использует для перекодировки либу iconv, котороя написана на C и стоит ей чуть не в том виде строку отдать - фиг че перекодируешь. Конечно я не спорю, что наверняка есть более эллегантные и аккуртные решения, но тут, как говорится, "Флаг в руки". Саидтесь и пишите.

svyatogor ★★★★★
() автор топика
Ответ на: комментарий от svyatogor

>2WFrag: А вот если бы ты внимательно посмотрел бы код, то увидел бы, что он использует для перекодировки либу iconv, котороя написана на C и стоит ей чуть не в том виде строку отдать - фиг че перекодируешь.

Я это заметил. Опять же, я предложил некоторые решения, с замечаниями относительно плюсов и минусов. И я не зря упоминал про непрерывное расположение элементов вектора (и отсутствие такой гарантии в std::string). Я даже пример с вектором привел, как его можно использовать для хранения C строки.

>Конечно я не спорю, что наверняка есть более эллегантные и аккуртные решения, но тут, как говорится, "Флаг в руки".

Ну так нужно совершенствоваться, становиться профессионалами! Обидно, что большинство наездов на качество опен-сорс обоснованны.

>Саидтесь и пишите.

Ну я же не могу переписать весь софт мира. :)

WFrag ★★★★
()
Ответ на: комментарий от WFrag

>>Конечно я не спорю, что наверняка есть более эллегантные и аккуртные решения, но тут, как говорится, "Флаг в руки".

> Ну так нужно совершенствоваться, становиться профессионалами! Обидно, что большинство наездов на качество опен-сорс обоснованны.

>>Саидтесь и пишите.

> Ну я же не могу переписать весь софт мира. :)

Поэтому давайте закруглятся :) парень написал полезный патч, мы доправили его досадные ошибки. он небось теперь на всю жизнь запомнит про стрдапы :) научится, программистами не рождаются.

и не важно -- оперсорс это или пропиетарщина какая-либо. Дебильного кода хвататет везде, во втором случае мы его не видим просто, а видим только результаты -- те-же лики, но уже с невозможностью исправить дело.

luc
()
Ответ на: комментарий от anonymous

про UTF-8

> utf8? Автор не чешется, может проживающие в России физики помогут?

Может, кто-то Вам и поможет, но лично я вообще против использования этой идиотской koi8...

Dselect ★★★
()
Ответ на: про UTF-8 от Dselect

> Может, кто-то Вам и поможет,

Зачем мне? sawfish-у надо помочь.

> но лично я вообще против использования этой идиотской koi8...

Именно. Но если Вы используете sawfish, то, наверное, прекрасно знаете, что

- librep с юникодом не работает (в смысле строк и регэкспов)

- в самом sawfish имеются места, работающие нормально только со STRING8.

anonymous
()
Ответ на: комментарий от anonymous

> - librep с юникодом не работает (в смысле строк и регэкспов)

$ locale

LANG=ru_RU.UTF-8
LC_CTYPE=ru_RU.UTF-8
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME=en_US.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES=en_US.UTF-8
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

$ rep
user> (string-match "[а-я]\+" "проверка")
t
user> rep-version 
"0.17"

Dselect ★★★
()
Ответ на: комментарий от Dselect

user> (substring "проверка" 1 5)
"\277\321\200\320"
user> 

anonymous
()
Ответ на: комментарий от Sun-ch

>>я очень активно программил на яве
> Вот так вот и совращают малолеток.
> Sun-ch * (*) (15.07.2004 11:12:47)

Давай, спой "когда ласкали вы детей сваааих"... %-)
Мож копейки бросать станут. :)

anonymous
()
Ответ на: комментарий от anonymous

Ну дык он написал, что его заставлют в колледже писать на яве.

Я так понимаю, что колледж это что то типа бывшего ПТУ, куда шли

доучиватся дети, не закончив среднюю школу.

< 17 лет т.е. малолетки.

Sun-ch
()
Ответ на: комментарий от Selecter

> накапайте на самогонщицу.
Павбывав бы...

eXOR ★★★★★
()
Ответ на: комментарий от Sun-ch

2 Sun-ch:
Сан-ч... вот у тебя мама/папа был? А почему ты тогда такой злой?

eXOR ★★★★★
()
Ответ на: комментарий от anonymous

>>Хорошо написал по теме JWZ: http://www.jwz.org/doc/linuxvideo.html.

>Я сам часто сталкивался с разными проблемами в линуксе. Но все они были решаемы.

>Я не хочу сказать, что у человека, написАвшего эту статью руки из... Нет, мне кажется он просто неудачник. Он просто обозленное трепло.

Он бывший участник команды Netscape, участник проекта Mozilla (давший ему это название), автор XEmacs'a.

Это человек, знающий о чем говорит.

faustus
()
Ответ на: комментарий от WFrag

> А если серьезно, то что там не так? Я писал парсер заголовков HTTP на boost::spirit, вроде полет нормальный (если не считать гигансткое время компиляции).

Да у них даже примеры из мануала не компилируются. http://boost.org/libs/spirit/doc/multi_pass.html

Плюс неконсистентные интерфейсы, плюс баги они фиксить не будут, потому что заняты мечтами о Spirit 2.

Короче - http://www.jwz.org/doc/cadt.html.

faustus
()
Ответ на: про g++ от Dselect

> Оно-то говно, только остальные -- еще хуже, и за них хотят денег.

Intel Copmpiler - бесплатен для non-commercial, и лучше на порядок.

Тут просто никакой конкуренции:
Configured with: ../gcc-3.3.2/configure --prefix=/usr/local/gcc-3.3.2 --enable-threads
Thread model: posix
gcc version 3.3.2

> cat except.C
#include <iostream>

class Except { };

int main()
{
try {
throw Except();
} catch (const Except &e) {
std::cout << "caught\n";
}
}

> ./except
Abort

faustus
()
Ответ на: комментарий от faustus

$ ./except 
caught

$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.4/specs
Configured with: ../src/configure -v 
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang 
--prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info 
--with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared 
--with-system-zlib --enable-nls --without-included-gettext 
--enable-__cxa_atexit --enable-clocale=gnu --enable-debug 
--enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc 
i486-linux
Thread model: posix
gcc version 3.3.4 (Debian 1:3.3.4-2)

anonymous
()
Ответ на: комментарий от Sun-ch

>Я так понимаю, что колледж это что то типа бывшего ПТУ, куда шли доучиватся дети, не закончив среднюю школу.

Неверно, саныч ты понимаешь. Колледж - это тоже что и университет (в некоторых случаях отделение крупного универа), по окончании которого получаешь диплом о высшем образовании (бакалавр).

svyatogor ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Ну и шо, не он же их проектировал.

Раз участвовал в разработке, значит находил для себя что-то близкое.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.