- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
DIR_STRUCT * fill_dir_struct(DIR_STRUCT * dir_stc, _ptr_by_val_(char *) base_dir_path, _ptr_by_val_(char *) offset_dir)
{
DIR_STRUCT * sub_dir;
DIR * srcdir;
struct stat st;
char full_sub_dir_path[MAX_PATH_SIZE];
struct dirent * dent;
sprintf(full_sub_dir_path, "%s/%s", base_dir_path, offset_dir);
dbgprintln("Directory %s", full_sub_dir_path);
if(NULL != (dir_stc = malloc(sizeof(DIR_STRUCT))))
{
memset(dir_stc, 0x00, sizeof(DIR_STRUCT));
if (NULL != (srcdir = opendir(full_sub_dir_path)))
{
if(NULL != (dir_stc->dir_path = malloc(strlen(offset_dir) + 1)))
{
strcpy(dir_stc->dir_path, offset_dir);
for( ;(NULL != (dent = readdir(srcdir))); )
{
if((0 != strcmp(dent->d_name, ".")) &&
(0 != strcmp(dent->d_name, "..")) &&
(0 <= fstatat(dirfd(srcdir), dent->d_name, &st, 0)))
{
if (S_ISDIR(st.st_mode)) //Directory
{
if(NULL != (sub_dir = fill_dir_struct(sub_dir, full_sub_dir_path, dent->d_name)))
{
dir_stc->sub_dirs = list_append_node(dir_stc->sub_dirs, sub_dir);
dir_stc->dir_files_size += sub_dir->dir_files_size;
dir_stc->sub_dir_files_count += sub_dir->sub_dir_files_count;
}
else
{
dir_stc = destroy_dir_struct(dir_stc);
break;
}
}
else //File
{
dbgprintln("File %s, size %lu bytes", dent->d_name, st.st_size);
dir_stc->dir_files = list_append_node(dir_stc->dir_files, allocate_and_copy_char_buffer(dent->d_name, strlen(dent->d_name) + 1));
dir_stc->dir_files_size += st.st_size;
dir_stc->sub_dir_files_count++;
}
}
}//End of for(;NULL != (dent = readdir(srcdir)); )
closedir(srcdir);
}
else//End of if(NULL != (dir_stc->dir_path = malloc(strlen(offset_dir) + 1)))
{
dir_stc = destroy_dir_struct(dir_stc);
}
}//End of if (NULL != (srcdir = opendir(full_sub_dir_path)))
else
{
dir_stc = destroy_dir_struct(dir_stc);
}
}//End of if(NULL != (dir_stc = malloc(sizeof(DIR_STRUCT))))
return dir_stc;
}
Восьмикратный индент, Йода нотейшн, const *(x) const в аргументах. Есть подозрение, что велосипедисты не знали о scandir.
Это кладезь говна.
Порвало. Возьму на вооружение.
Типично для исповедующих сишко- (кресто-)блядство обсирать бейсик (аду), что там надо аж целых 2 (джва!) раза писать if и прочие операторы - в начале, и в конце.
А когда у самих метод подпухнет, то немедленно пишут вот такую говнятину, потому что без неё непонятно какой где блок кода.
Вот знаю нескольких уже умудренных опытом людей которые пишут похожие комменты (end if, end while) хотя к бейсику/аде положительных чувств детектировано не было.
не осилили короткие функции
Стоит ли говорить, что при изменении блока кода (с for на while) комментарии в недрах забудут поменять и он будет неактуальным, ведь компилятором оно в отличии от той же ады не проверяется.
В остальных случаях порицается.
Только быдлоынтырпрайз где правят бал паттерны с декораторами, адаптерами, делегаторами, приспособленцами и прочими тупорылыми обёртками, а классы тупо делегируют работу друг другу, периодически проверяя на недопустимые значения аргумента, то там да, методы длиннее 10 строк - редкость.
Там же где есть реальная логика, иногда трудно разделить даже большой метод, из-за необходимости тянуть в другое местоего контекст и кучу переменных.
>В остальных случаях порицается.
Если чё, я тоже порицаю. Дабы не возникало разночтений.
#endif // defined(WHATEVER)
сам несколько раз так охуевал
или пользовал класс перед объявлением - вместо указания одной ошибки компилятор раскукарекался на меня километрами бесполезных тупорылых ошибок, в которые я минут пять вдуплял
Неоспоримый факт. Вообще длиннющие крестопортянки ни о чем до сих пор причиняют много НЕПОНИМАНИЯ.
На хаскель набрасывайте. Он может через всю программу тип вывести и потом высрать непонятно чо и где.
Вот не надо, там всем топ-левел биндингам принято явно типы писать, чтобы было видно, где именно проблемы. Компилятор даже ворнинг пишет, если так не делаешь.
ааа, Num это какбэ и есть явно тип? то есть и Integer, и Float, и Vector3D - это всё Num?
Тут я как-то сомневаюсь что вообще есть c таким названием, и что оно Num.
Зато там есть Rational и Fractional
Речь о том что хацкелисты не настолько антиобобщенны чтобы включать в стандартную библиотеку вектор огранниченный унылым трёхмерным пространством.
Ну да. Даже в гейдеве векторы очень часто четырехмерны.
Не, Num это тайпкласс, который должен обладать определенными методами (арифметика вроде бы и че-то там еще). А Integer, Float и т.п. являются его инстансами. Vector3D тоже можно сделать инстансом Num, если получится запилить все методы, требуемые Num'ом, и они будут иметь какой-то смысл.
И с пониманием этого приходит беда-печаль-огорчение, т.как material implication не эквивалентно обычному implication. Т.е. не все, что истинно предполагает другие истины (нужна причинно-следственная связь). Дана Скотт плачет горькими слезами, Милнер стреляется и пьет яд. Конец первого действия.
Прошу Вас пишите еще! Выдающаяся драматургия.
Это и спасает. Но многие не пишут, ОЛОЛО ПОСМОТРИТЕ КАКОЙ КРАТКИЙ ЯЗЫК. Я ДЕЛАЮ ПРОГРАММЫ В ОДНУ СТРОЧКУ.