server0451

Форк
0
/
utilities.c 
164 строки · 3.7 Кб
1
/******************* ОПИСАНИЕ *******************/
2

3
/**
4
 * Имя файла: utilities.c
5
 * ----------------------------------------------------------------------------|---------------------------------------|
6
 * Назначение: некоторые вспомогательные макросы и функции.
7
 * ----------------------------------------------------------------------------|---------------------------------------|
8
 * Примечания:
9
 */
10

11

12
/************ ДИРЕКТИВЫ ПРЕПРОЦЕССОРА ***********/
13

14
/*--- Включения ---*/
15

16
// Из стандартной библиотеки языка Си.
17
#include <stdio.h>
18
#include <inttypes.h>
19
#include <stdbool.h>
20
#include <string.h>
21

22
// Локальные модули.
23
#include "utilities.h"
24

25

26
/******************** ФУНКЦИИ *******************/
27

28
/*--- Работа со строками ---*/
29

30
bool utilities_nullify_first_CR_or_LF_in_string(char *buf)
31
{
32
    for (uint32_t i = 0; i < strlen(buf); ++i) {
33
        if (buf[i] == '\r' || buf[i] == '\n') {
34
            buf[i] = '\0';
35

36
            return 1;
37
        }
38
    }
39

40
    return 0;
41
}
42

43
bool utilities_nullify_all_CR_and_LF_in_char_array(char *buf, size_t buf_size)
44
{
45
    uint32_t i = 0;
46
    for (uint32_t j = 0; j < buf_size - 1; ++j) {
47
        if (buf[j] == '\r' || buf[i] == '\n') {
48
            buf[j] = '\0';
49
            ++i;
50
        }
51
    }
52

53
    return i;
54
}
55

56
bool utilities_nullify_all_trailing_CR_and_LF_in_string(char *buf)
57
{
58
    uint32_t i = 0;
59
    while (buf[strlen(buf) - 1] == '\r' || buf[strlen(buf) - 1] == '\n') {
60
        buf[strlen(buf) - 1] = '\0';
61
        ++i;
62
    }
63

64
    return i;
65
}
66

67
bool utilities_substitute_all_CR_and_LF_in_char_array(char *buf, size_t buf_size, char character)
68
{
69
    uint32_t i = 0;
70
    for (uint32_t j = 0; j < buf_size - 1; ++j) {
71
        if (buf[j] == '\r' || buf[i] == '\n') {
72
            buf[j] = character;
73
            ++i;
74
        }
75
    }
76

77
    return i;
78
}
79

80
bool utilities_append_LF_to_string(char *buf, size_t buf_size)
81
{
82
    if (buf_size - strlen(buf) >= 2) {  // Один байт для LF, второй для нуля.
83
        buf[strlen(buf)] = '\n';
84

85
        return 1;
86
    }
87

88
    return 0;
89
}
90

91
bool utilities_append_LF_if_absent_to_string(char *buf, size_t buf_size)
92
{
93
    if (buf[strlen(buf) - 1] == '\n') {
94
        return 0;
95
    } else if (buf_size - strlen(buf) >= 2) {  // Один байт для LF, второй для нуля.
96
        buf[strlen(buf)] = '\n';
97

98
        return 1;
99
    }
100

101
    return 0;
102
}
103

104
bool utilities_append_CR_to_string(char *buf, size_t buf_size)
105
{
106
    if (buf_size - strlen(buf) >= 2) {  // Один байт для CR, второй для нуля.
107
        buf[strlen(buf)] = '\r';
108

109
        return 1;
110
    }
111

112
    return 0;
113
}
114

115
void utilities_to_lowercase_string(char *buf)
116
{
117
    for (uint32_t i = 0; i < strlen(buf); ++i) {
118
        if (buf[i] >= 'A' && buf[i] <= 'Z') {
119
            buf[i] += 32;  // Разница между ASCII-кодом заглавной и строчной буквы.
120
        }
121
    }
122
}
123

124

125
/*--- Работа с файлами ---*/
126

127
void utilities_write_to_file_single_line(char *str, char *file_path)
128
{
129
    FILE *f = fopen(file_path, "w");
130
    fputs(str, f);
131
    fclose(f);
132
}
133

134
void utilities_read_from_file_single_line(char *buf, size_t buf_size, char *file_path)
135
{
136
    FILE *f = fopen(file_path, "r");
137

138
    if (f == NULL) {
139
        f = fopen(file_path, "w");
140
        freopen(NULL, "r", f);
141
    }
142

143
    fgets(buf, buf_size, f);
144
    fclose(f);
145
}
146

147
void utilities_read_from_file(char *buf, size_t buf_size, char *file_path)
148
{
149
    FILE *f = fopen(file_path, "r");
150

151
    uint32_t i = 0;
152
    char c = 0;
153
    while (c != EOF && i < buf_size - 1) {
154
        c = fgetc(f);
155

156
        if (c != EOF) {
157
            buf[i] = c;
158
        }
159

160
        ++i;
161
    }
162

163
    fclose(f);
164
}
165

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.