@@ -126,6 +126,34 @@ static void read_02X(const char* str, uint8_t* byte) {
126
126
* byte = b [1 ] + (b [0 ] << 4 );
127
127
}
128
128
129
+ static void read_ip (const char * str , uint8_t * ip ) {
130
+ uint8_t ip_i = 0 ;
131
+ uint8_t i = 0 ;
132
+ uint16_t tmp = 0 ;
133
+ for (;;) {
134
+ if ('0' <= str [i ] && str [i ] <= '9' ) {
135
+ tmp = tmp * 10 + str [i ] - '0' ;
136
+ } else if (str [i ] == '.' || str [i ] != '\n' || str [i ] != '\0' ) {
137
+ if (tmp <= 0xFF && ip_i < 4 ) {
138
+ ip [ip_i ] = tmp ;
139
+ ip_i += 1 ;
140
+ tmp = 0 ;
141
+ } else {
142
+ break ;
143
+ }
144
+ if (str [i ] != '\n' && ip_i == 4 ) {
145
+ return ;
146
+ }
147
+ } else {
148
+ break ;
149
+ }
150
+ i += 1 ;
151
+ }
152
+ FURI_LOG_E (TAG , "cannot parse as ip string [%s]" , str );
153
+ ip [0 ] = ip [1 ] = ip [2 ] = ip [3 ] = 0 ;
154
+ return ;
155
+ }
156
+
129
157
static void set_default_config (EthernetSaveConfig * cfg ) {
130
158
const uint8_t def_mac [6 ] = ETHERNET_SAVE_DEFAULT_MAC ;
131
159
const uint8_t def_ip [4 ] = ETHERNET_SAVE_DEFAULT_IP ;
@@ -155,10 +183,15 @@ bool storage_read_config(File* file, EthernetSaveConfig* cfg) {
155
183
read_02X (str + strlen ("mac: XX-XX-XX-XX-" ), & cfg -> mac [4 ]);
156
184
read_02X (str + strlen ("mac: XX-XX-XX-XX-XX-" ), & cfg -> mac [5 ]);
157
185
} else if (!strncmp (str , "ip: " , 4 )) {
186
+ read_ip (str + strlen ("ip: " ), cfg -> ip );
158
187
} else if (!strncmp (str , "mask: " , 6 )) {
188
+ read_ip (str + strlen ("mask: " ), cfg -> mask );
159
189
} else if (!strncmp (str , "gateway: " , 9 )) {
190
+ read_ip (str + strlen ("gateway: " ), cfg -> gateway );
160
191
} else if (!strncmp (str , "dns: " , 5 )) {
192
+ read_ip (str + strlen ("dns: " ), cfg -> dns );
161
193
} else if (!strncmp (str , "ping_ip: " , 9 )) {
194
+ read_ip (str + strlen ("ping_ip: " ), cfg -> ping_ip );
162
195
}
163
196
}
164
197
0 commit comments