Обход каталогов

Sep 03, 2010 08:40

А все таки, в языке Си есть свое очарование. Да, пускай это высокоуровневый ассемблер, да на нем приходится писать много кода для простых вещей, да это не оружие массового поражения, вроде C++, но в его простоте и заключается красота. Это как меч, - им достаточно сложно научиться пользоваться, в отличие например от пистолета или автомата, но если ( Read more... )

Си

Leave a comment

Comments 11

chemodax September 4 2010, 08:20:40 UTC
О, APR pools это мега круто. Хочешь въедливое ревью?

Reply

egoroff September 4 2010, 10:13:15 UTC
:) давай, буду рад!

Reply

chemodax September 4 2010, 11:48:32 UTC
Для начала на высоком уровне:
  1. Знающие собаководы говорят что обход дерева директорий в ширину намного эффективнее чем в глубину. Т.е. сначала лучше обойти все файлы в директории, а потом зайти в каждую директорию -- так лучше дисковый кэш будет работать. Хотя это потребует сохранения всех поддиректорий в памяти и изменит поведение.

  2. Для большей гибкости я бы сделал Include/Exclude pattern тоже через callback или перенес на ответственность PfnFileHandler. Я уж если оставлять такую возможность то на паттерн надо делить на токены один раз, а не при каждой проверке.

  3. Непонятен вопрос в обработкой ошибок. Я бы вынес печать сообщений об ошибке на более высокий уровень, а в функциях возвращал apr_status_t. Как минимум сделал бы callback.
  4. У PfnFileHandler нет возможности прервать процесс по ошибке. Я бы добавил apr_status_t

Теперь по мелочи:
  1. void (* PfnFileHandler)(apr_pool_t* pool, const char* pathToFile, DataContext* ctx);
    ctx должен быть типа void *, иначе нарушается инкапсуляция.

Reply

egoroff September 4 2010, 12:00:06 UTC
:) о! круто! спасибо большое! все по делу. Поправлю, разве что обработку ошибок оставлю в таком виде, и возможно пока не буду обходить дерево в ширину.

Reply


Leave a comment

Up