Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. #include"file_storage.h"
  2. #include"search_functions.h"
  3.  
  4. char* Open_file_write_to_str(const char* filename, int* Strlen) {
  5. int File = 0;
  6. if ((File = open(filename, O_RDONLY)) < 0) { // открыть файл для чтения
  7. printf("невозможно открыть файл для чтения");
  8. close(File);
  9. return NULL;
  10. }
  11.  
  12. struct stat statbuf = {};
  13. if ( fstat(File, &statbuf) < 0) { // определить размер входного файла
  14. printf("fstat error");
  15. close(File);
  16. return NULL;
  17. }
  18.  
  19. void * Pointer; //адрес начала участка отбраженной памяти
  20. if ((Pointer = mmap(0, statbuf.st_size, PROT_READ, MAP_SHARED, File, 0))
  21. == MAP_FAILED) { // отображение кэша в адресное пространство
  22. printf("ошибка вызова функции mmap для входного файла");
  23. close(File);
  24. return NULL;
  25. }
  26.  
  27. char* Strfile = malloc(statbuf.st_size); // создание строки-копии входного файла
  28.  
  29. memcpy(Strfile, Pointer, statbuf.st_size); // сделать копию файла
  30.  
  31. *Strlen = statbuf.st_size;
  32. munmap(Pointer, statbuf.st_size);
  33.  
  34. close(File);
  35. return Strfile;
  36. }
  37.  
  38. /*int Find_endoftag(Efile* Fparts) {
  39. char* Tag_to_letter = strstr(Fparts->Tag, "\n\n");
  40. if (Tag_to_letter == NULL) {
  41. Tag_to_letter = strstr(Fparts->Tag, "\r\n\r\n");
  42. }
  43. if (Tag_to_letter == NULL) {
  44. Tag_to_letter = strstr(Fparts->Tag, "\n\r\n\r");
  45. }
  46. if (Tag_to_letter != NULL) {
  47. Fparts->Tag = '\0';
  48. }
  49. return Tag_to_letter;
  50. }*/
  51.  
  52. int Checktag(Efile* Fparts, int start) { // проверка наличия тега в начале строки
  53. int res = 0;
  54. if (isblank(Fparts->Tag[start])) {
  55. return res;
  56. }
  57. for ( int j = start; (Fparts->Tag[j] != '\n') && (Fparts->Tag[j] != '\r'); j++) {
  58. if (Fparts->Tag[j] == ':') {
  59. res = j;
  60. break;
  61. }
  62. }
  63. return res;
  64. }
  65.  
  66. void Correct_caps_find_endoftag(Efile* Fparts) { // перевод всех тегов в строчный вариант записи(все буквы тегов строчные)
  67. for(int j = 0; (Fparts->Tag[j] != '\0'); j++) {
  68. if((Fparts->Tag[j] == '\n') || (Fparts->Tag[j] == '\r')) {
  69. if((Fparts->Tag[j-1] == '\n') || (Fparts->Tag[j-1] == '\r')) {
  70. Fparts->Letter = &(Fparts->Tag[j]);
  71. Fparts->Tag[j-1] ='\0'; // ограничили заголовок письма
  72. break;
  73. }
  74. j++;
  75. int end = Checktag(Fparts->Tag, j);
  76. if(end > 0) { // проверка тега
  77. for (; j < end; j++) { // перевод букв
  78. Fparts->Tag[j] = tolower(Fparts->Tag[j]);
  79. }
  80. }
  81. }
  82. }
  83. }
  84.  
  85. char* Search_startlinetag (Efile* Fparts, const char* tag, char* tagspaсe) { // запись полей заголовков
  86. char* pos = strstr(Fparts->Tag, tag);
  87. if (pos == NULL) {
  88. printf("error of tag info\n");
  89. return NULL;
  90. }
  91. if ((*(pos - 1) == '\n') || (*(pos - 1) == '\r') || (pos - 1 == Fparts->Tag)) {
  92. int state += strlen(tag) - 1;
  93. for(int i = 0; (isspace(*(pos+state+i))) && ((*(pos+state+i) != '\n') || (*(pos+state+i) != '\r')); i++); // проверка на пробелы
  94. while (*(pos+state+i) != '\n') || (*(pos+state+i) != '\r')) {
  95. tagspace[i] = *(pos+state+i);
  96. }
  97. }
  98. }
  99. return tagspaсe;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement