#ifndef HSLOCAL_INCLUDED
#define HSLOCAL_INCLUDED
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <hs/hs.h>
#include <errno.h>
extern "C" {
char *readInputData(const char *inputdata, unsigned int *length);
}
#endif //HSLOCAL_INCLUDED
#include "hslocallib.h"
char *readInputData(const char *inputdata, unsigned int *length) {
FILE *file = fopen(inputdata, "rb");
if (!file) {
fprintf(stderr, "Невозможно прочитать файл \"%s\": %s\n", inputdata,
strerror(errno));
return NULL;
}
if (fseek(file, 0, SEEK_END) != 0) {
fprintf(stderr, "Невозможно определить конец файла \"%s\": %s\n", inputdata,
strerror(errno));
fclose(file);
return NULL;
}
long dataLen = ftell(file);
if (dataLen < 0) {
fprintf(stderr, "Невозможно вернуть положение указателя в файле %s\n", strerror(errno));
fclose(file);
return NULL;
}
if (fseek(file, 0, SEEK_SET) != 0) {
fprintf(stderr, "Невозможно найти начало файла \"%s\": %s\n", inputdata,
strerror(errno));
fclose(file);
return NULL;
}
char *inputData = malloc(dataLen);
if (!inputData) {
fprintf(stderr, "Невозможно выделить память для входных данных\n");
fclose(file);
return NULL;
}
char *ptrInputData = inputData;
size_t bytesLeft = dataLen;
while (bytesLeft) {
size_t bytesRead = fread(ptrInputData, 1, bytesLeft, file);
bytesLeft -= bytesRead;
ptrInputData += bytesRead;
if (ferror(file) != 0) {
fprintf(stderr, "Ошибка чтения файла\n");
free(inputData);
fclose(file);
return NULL;
}
}
fclose(file);
*length = (unsigned int)dataLen;
return inputData;
}
In order to ensure that copy functions of filesystem_error are noexcept, typical implementations store an object holding the return value of what() and two std::filesystem::path objects referenced by path1() and path2() respectively in a separately-allocated reference-counted storage.
Currently the MS STL implementation is non-conforming: objects mentioned above are stored directly in the filesystem object, which makes the copy functions not noexcept.
void foo() {
int *smth;
try {
smth = new int[100];
if (5 < 4) {
std::runtime_error("Беда");
}
} catch (std::runtime_error &e) {
e.what();
}
delete[] smth;
}
(uint32_t)var
в предпоследней строке. Число-то >1016, а uint32 — это 4·109.var *= 1e8;
number = (uint64_t)var;
while (number % 10 == 0)
number /= 10;