[cdev] исправление find
    Grigoriy A. Sitkarev 
    sitkarev на komitex.ru
       
    Вт Мар 16 20:33:51 MSK 2010
    
    
  
Много замечаний конечно.
Пока что самые основные, всё остальное я думаю вы сами увидите и 
исправите после того как начнёт более-менее работать ваша программа.
1. После скобок, завершающих тело функции, точку с запятой не надо 
ставить. Она там лишняя.
Аргументы функции должны быть разделены пробелами. Пробелы должны быть и 
  после операторов +,-,=,!=,== и т.д. Вы посмотрите ещё раз LKCS, там 
много примеров, всё же понятно должно быть. Секция 3.1 как раз говорит 
про пробелы.
2. Имена в верхнем регистре принято использовать для макросов, 
переменных с такими именами желательно избегать.
3. Функцию xstrcpy надо убрать и заменить на xstrdup тогда. Что-то в 
таком духе должно быть, проверите как работает.
char *
xstrdup(const char *str)
{
	char *rs;
	size_t len;
	len = strlen(str);
	rs = malloc(len+1);
	if (rs == NULL) {
		fprintf(stderr, "xstrdup: out of memory\n");
		exit(1);
	}
	memcpy(rs, str, len);
	rs[len] = 0;
	return rs;
}
4. Вы не понимаете смысла модификатора extern. Он нужен если переменная, 
которую вы хотите использовать, объявлена в другом файле. В вашем случае 
его использовать не нужно. Перечитайте пожалуйста в литературе по языку 
Си про extern подробнее.
5. С getcwd(3) думаю можно обойтись так. Вам это проверить тоже надо.
char *
xgetcwd(void)
{
#define CWD_GROW_UP 32
	size_t len;
	char *rs, *s;
	len = 0;
	do {
		rs = realloc(rs, len+CWD_GROW_UP);
		if (rs == NULL) {
			fprintf(stderr, "xgetcwd: out of memory\n");
			exit(1);
		}
		len += CWD_GROW_UP;
		s = getcwd(rs, len);
	} while ((s == NULL) && (errno == ERANGE));
	if (s == NULL) {
		fprintf(stderr, "xgetcwd: can't get current dir: %s\n",
				strerror(errno));
		exit(1);
	}
	return rs;
}
6. Вам надо сделать конечно чтобы в нескольких каталогах можно было 
делать поиск и -exec бы надо приделать тоже. Начните с первого пока. 
Кроме того, шаблон, по которому задаётся поиск, это аргумент операнда 
-name. У вас его вообще нет.
7. Почему вы решили что именно lstat(2) тормозит?
8. По поводу проверки ошибок системных вызовов, в каждой man-странице к 
системному вызову есть секция ERRORS. При ошибке системные вызова 
возвращают -1 и устанавливают переменную errno. Прочтите errno(3) и 
strerror(3) также.
Как обрабатывать ошибку, зависит от контекста. Если ошибка фатальная и 
вы ничего не можете сделать, то программу надо завершать. Если ошибка не 
фатальная, то как правило, алгоритм должен предусматривать её обработку 
каким то образом. Как это делать - зависит от ситуации.
Что-то ещё вспомню - напишу.
lenad89 пишет:
> Вот код.
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> cdev mailing list
> cdev на wiki.syktsu.ru
> http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev
    
    
Подробная информация о списке рассылки cdev