История изменений
Исправление PPP328, (текущая версия) :
Как я уже сказал, вы можете вообще убрать это вызов, если сделаете три вызова вместо _log_file_write:
// Пишет в file тип сообщения и время
static void _log_file_wtime(FILE *file, enum log_level level);
// Пишет в file переданные исходно данные
static void _log_file_wdata(FILE *file, const char *fmt, va_list args);
// Пишет в file \n
static void _log_file_wlend(FILE *file);
Так у меня на этапе malloc возникает
__attribute__((format(printf, 1, 2)))
char *my_asprintf(const char *fmt, ...) {
va_list list;
va_start(list, fmt);
char *str = my_vasprintf(fmt, list);
va_end(list);
return str;
}
char *my_vasprintf(const char *fmt, va_list args) {
va_list copy;
va_copy(copy, args);
ssize_t size = vsnprintf(NULL, 0, fmt, copy);
va_end(copy);
char *str = malloc(size + 1);
// Алсо неплохо было бы проверить malloc
vsprintf(str, fmt, args);
return str;
}
Исходная версия PPP328, :
Как я уже сказал, вы можете вообще убрать это вызов, если сделаете три вызова вместо _log_file_write:
// Пишет в file тип сообщения и время
static void _log_file_wtime(FILE *file, enum log_level level);
// Пишет в file переданные исходно данные
static void _log_file_wdata(FILE *file, const char *fmt, va_list args);
// Пишет в file \n
static void _log_file_wlend(FILE *file);
Так у меня на этапе malloc возникает
__attribute__((format(printf, 1, 2)))
char *my_asprintf(const char *fmt, ...) {
va_list list;
va_start(list, fmt);
char *str = my_vasprintf(fmt, list);
va_end(list);
return str;
}
char *my_vasprintf(const char *fmt, va_list args) {
va_list copy;
va_copy(copy, args);
size_t size = vsnprintf(NULL, 0, fmt, copy);
va_end(copy);
char *str = malloc(size + 1);
// Алсо неплохо было бы проверить malloc
vsprintf(str, fmt, args);
return str;
}