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@