[devel] [git update] packages/katrin: heads/master
Денис Смирнов
=?iso-8859-1?q?mithraen_=CE=C1_altlinux=2Eru?=
Сб Июн 23 18:40:46 MSD 2007
On Thu, Jun 21, 2007 at 07:15:03PM +0700, Slava Semushin wrote:
>> diff --git a/src/tc/katrin-tc.c b/src/tc/katrin-tc.c
>> +if (argv[1]!=NULL && (strcmp(argv[1],"remove")==0 || strcmp(argv[1],"reload")==0))
>> +{
>> + char *iface = strdup("eth0");
>> + char *allrate = strdup("100mbit");
SS> strdup() выделяет новую память с помощью malloc(). Это значит, что её
SS> можно (и нужно) освободить во избежание утечек.
Добавлю, что если строки столь небольшие, то возможно имеет смысл
использовать strdupa. Хотя не читая кода далее мне непонятно в связи с чем
используется подобное, вместо указателя на константу.
>> + //open tmp script file
>> + char prog[] = "/tmp/katrin-tc-tmp";
>> + char path[] = "/tmp";
SS> Эти строчки несколько коробят глаз. Я не знаю всех тонкостей вашей
SS> задачи, но кажется, что использование mkstemp(3) тут было бы к месту.
Угу. Создание временных файлов со статическими именами неприемлимо.
>> + sprintf(command,"tc qdisc del dev %s root handle 1: htb;\n",iface);
SS> Многочисленное использование sprintf() и strcpy() в коде наводит на
SS> мысль, что пользователям вашего билинга может повезти :)
Кстати есть ещё asprintf. Наиболее удобный вариант для подобных
применений, IMHO.
>> + fclose(fh);
SS> Вот здесь (если не ошибаюсь) можно и память освободить:
SS> + free(iface);
SS> + free(allrate);
Если использовать strdupa/asprintf то можно (и нужно) не освобождать. Ибо
память выделяется в стеке.
Эти функции не шибко-то переносимы, но потрясающе удобны.
--
С уважением, Денис
http://freesource.info
----------------------------------------------------------------------------
Хотел предложить воспользоваться bushbug, но он оказался сломанным.
-- ldv in sisyphus@
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: Digital signature
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20070623/ec755abd/attachment-0001.bin>
Подробная информация о списке рассылки Devel