[devel] [git update] packages/katrin: heads/master

Денис Смирнов mithraen на altlinux.ru
Сб Июн 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@
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.altlinux.org/pipermail/devel/attachments/20070623/ec755abd/attachment.bin 


Подробная информация о списке рассылки Devel