Files
CMFA/complex_modules_file_analyzer.c

96 lines
3.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
// Объявляем функции модулей как слабые (weak)
#define DECLARE_MODULE_RUN(num) extern int module_##num##_run(const char *filename) __attribute__((weak))
DECLARE_MODULE_RUN(00);
DECLARE_MODULE_RUN(01);
DECLARE_MODULE_RUN(02);
DECLARE_MODULE_RUN(03);
DECLARE_MODULE_RUN(04);
DECLARE_MODULE_RUN(05);
DECLARE_MODULE_RUN(06);
DECLARE_MODULE_RUN(07);
DECLARE_MODULE_RUN(08);
DECLARE_MODULE_RUN(09);
DECLARE_MODULE_RUN(10);
DECLARE_MODULE_RUN(11);
DECLARE_MODULE_RUN(12);
DECLARE_MODULE_RUN(13);
DECLARE_MODULE_RUN(14);
DECLARE_MODULE_RUN(15);
DECLARE_MODULE_RUN(16);
DECLARE_MODULE_RUN(17);
DECLARE_MODULE_RUN(18);
DECLARE_MODULE_RUN(19);
DECLARE_MODULE_RUN(20);
DECLARE_MODULE_RUN(21);
DECLARE_MODULE_RUN(22);
DECLARE_MODULE_RUN(23);
DECLARE_MODULE_RUN(24);
DECLARE_MODULE_RUN(25);
DECLARE_MODULE_RUN(26);
DECLARE_MODULE_RUN(27);
DECLARE_MODULE_RUN(28);
DECLARE_MODULE_RUN(29);
DECLARE_MODULE_RUN(30);
DECLARE_MODULE_RUN(31);
DECLARE_MODULE_RUN(32);
DECLARE_MODULE_RUN(33);
DECLARE_MODULE_RUN(34);
DECLARE_MODULE_RUN(35);
int main(int argc, char *argv[]) {
// Проверка аргументов
if (argc != 2) {
fprintf(stderr, " Использование: %s <filename>\n", argv[0]);
return 1;
}
system("clear");
const char *filename = argv[1];
// Проверка, существует ли файл
if (access(filename, F_OK) != 0) {
// Если файл не существует, считаем аргумент строкой и вызываем только module_30
if (module_30_run != NULL) {
printf("\n\033[1;90m Module:\033[0m 30\n");
int result = module_30_run(filename);
if (result != 0) {
fprintf(stderr, " Модуль module_30 завершился с ошибкой: %d\n", result);
}
} else {
fprintf(stderr, " Модуль module_30 не реализован\n");
}
return 0;
}
// Если файл существует, выполняем все модули
int (*module_runs[36])(const char *) = {
module_00_run, module_01_run, module_02_run, module_03_run,
module_04_run, module_05_run, module_06_run, module_07_run,
module_08_run, module_09_run, module_10_run, module_11_run,
module_12_run, module_13_run, module_14_run, module_15_run,
module_16_run, module_17_run, module_18_run, module_19_run,
module_20_run, module_21_run, module_22_run, module_23_run,
module_24_run, module_25_run, module_26_run, module_27_run,
module_28_run, module_29_run, module_30_run, module_31_run,
module_32_run, module_33_run, module_34_run, module_35_run
};
// Выполняем все модули последовательно
for (int i = 0; i < 36; i++) {
if (module_runs[i] != NULL) {
printf("\n\033[1;90m Module:\033[0m %02d\n", i);
int result = module_runs[i](filename);
if (result != 0) {
fprintf(stderr, "\033[1;90m Module:\033[0m \033[0;37m%02d\033[0m \033[0;31mfailed with error: %d\033[0m\n", i, result);
}
}
}
return 0;
}
// gcc -Wall -Wextra -o cmfa complex_modules_file_analyzer.c module_*.c -lmagic -luchardet -larchive -lavformat -lavcodec -lavutil -lexif