Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include"file_storage.h"
- #include"search_functions.h"
- char* Open_file_write_to_str(const char* filename, int* Strlen) {
- int File = 0;
- if ((File = open(filename, O_RDONLY)) < 0) { // открыть файл для чтения
- printf("невозможно открыть файл для чтения");
- close(File);
- return NULL;
- }
- struct stat statbuf = {};
- if ( fstat(File, &statbuf) < 0) { // определить размер входного файла
- printf("fstat error");
- close(File);
- return NULL;
- }
- void * Pointer; //адрес начала участка отбраженной памяти
- if ((Pointer = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, File, 0))
- == MAP_FAILED) { // отображение кэша в адресное пространство
- printf("ошибка вызова функции mmap для входного файла");
- close(File);
- return NULL;
- }
- char* Strfile = malloc(statbuf.st_size); // создание строки-копии входного файла
- memcpy(Strfile, Pointer, statbuf.st_size); // сделать копию файла
- *Strlen = statbuf.st_size;
- munmap(Pointer, statbuf.st_size);
- close(File);
- return Strfile;
- }
- /*int Find_endoftag(Efile* Fparts) {
- char* Tag_to_letter = strstr(Fparts->Tag, "\n\n");
- if (Tag_to_letter == NULL) {
- Tag_to_letter = strstr(Fparts->Tag, "\r\n\r\n");
- }
- if (Tag_to_letter == NULL) {
- Tag_to_letter = strstr(Fparts->Tag, "\n\r\n\r");
- }
- if (Tag_to_letter != NULL) {
- Fparts->Tag = '\0';
- }
- return Tag_to_letter;
- }*/
- int Checktag(Efile* Fparts, int start) { // проверка наличия тега в начале строки
- int res = 0;
- if (isblank(Fparts->Tag[start])) {
- return res;
- }
- for ( int j = start; (Fparts->Tag[j] != '\n') && (Fparts->Tag[j] != '\r'); j++) {
- if (Fparts->Tag[j] == ':') {
- res = j;
- break;
- }
- }
- return res;
- }
- void Correct_caps_find_endoftag(Efile* Fparts) { // перевод всех тегов в строчный вариант записи(все буквы тегов строчные)
- for(int j = 0; (Fparts->Tag[j] != '\0'); j++) {
- if((Fparts->Tag[j] == '\n') || (Fparts->Tag[j] == '\r')) {
- if((Fparts->Tag[j-1] == '\n') || (Fparts->Tag[j-1] == '\r')) {
- Fparts->Letter = &(Fparts->Tag[j]);
- Fparts->Tag[j-1] ='\0'; // ограничили заголовок письма
- break;
- }
- j++;
- int end = Checktag(Fparts->Tag, j);
- if(end > 0) { // проверка тега
- for (; j < end; j++) { // перевод букв
- Fparts->Tag[j] = tolower(Fparts->Tag[j]);
- }
- }
- }
- }
- }
- char* Search_startlinetag (Efile* Fparts, const char* tag, char* tagspaсe) { // запись полей заголовков
- char* pos = strstr(Fparts->Tag, tag);
- if (pos == NULL) {
- printf("error of tag info\n");
- return NULL;
- }
- if ((*(pos - 1) == '\n') || (*(pos - 1) == '\r') || (pos - 1 == Fparts->Tag)) {
- int state += strlen(tag) - 1;
- for(int i = 0; (isspace(*(pos+state+i))) && ((*(pos+state+i) != '\n') || (*(pos+state+i) != '\r')); i++); // проверка на пробелы
- while (*(pos+state+i) != '\n') || (*(pos+state+i) != '\r')) {
- tagspace[i] = *(pos+state+i);
- }
- }
- }
- return tagspaсe;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement