diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/misc.c | 39 | ||||
-rw-r--r-- | apps/misc.h | 8 | ||||
-rw-r--r-- | apps/settings.c | 37 |
3 files changed, 48 insertions, 36 deletions
diff --git a/apps/misc.c b/apps/misc.c index a49739f92d..69cb7d3174 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -21,6 +21,9 @@ #include "file.h" #include "lcd.h" #include "sprintf.h" +#include "errno.h" +#include "system.h" + #define ONE_KILOBYTE 1024 #define ONE_MEGABYTE (1024*1024) @@ -49,6 +52,42 @@ char *num2max5(unsigned int bytes, char *max5) return max5; } +/* Read (up to) a line of text from fd into buffer and return number of bytes + * read (which may be larger than the number of bytes stored in buffer). If + * an error occurs, -1 is returned (and buffer contains whatever could be + * read). A line is terminated by a LF char. Neither LF nor CR chars are + * stored in buffer. + */ +int read_line(int fd, char* buffer, int buffer_size) +{ + int count = 0; + int num_read = 0; + + errno = 0; + + while (count < buffer_size) + { + unsigned char c; + + if (1 != read(fd, &c, 1)) + break; + + num_read++; + + if ( c == '\n' ) + break; + + if ( c == '\r' ) + continue; + + buffer[count++] = c; + } + + buffer[MIN(count, buffer_size - 1)] = 0; + + return errno ? -1 : num_read; +} + #ifdef TEST_MAX5 int main(int argc, char **argv) { diff --git a/apps/misc.h b/apps/misc.h index b5cf896b28..c8aa266d5f 100644 --- a/apps/misc.h +++ b/apps/misc.h @@ -22,3 +22,11 @@ Make sure to have space for 6 bytes in the buffer. 5 letters plus the terminating zero byte. */ char *num2max5(unsigned int bytes, char *max5); + +/* Read (up to) a line of text from fd into buffer and return number of bytes + * read (which may be larger than the number of bytes stored in buffer). If + * an error occurs, -1 is returned (and buffer contains whatever could be + * read). A line is terminated by a LF char. Neither LF nor CR chars are + * stored in buffer. + */ +int read_line(int fd, char* buffer, int buffer_size); diff --git a/apps/settings.c b/apps/settings.c index 63ba04a356..81e4d12f69 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -44,6 +44,7 @@ #include "file.h" #include "errno.h" #include "system.h" +#include "misc.h" #ifdef HAVE_LCD_BITMAP #include "icons.h" #include "font.h" @@ -707,42 +708,6 @@ void settings_load(void) settings_apply(); } -/* Read (up to) a line of text from fd into buffer and return number of bytes - * read (which may be larger than the number of bytes stored in buffer). If - * an error occurs, -1 is returned (and buffer contains whatever could be - * read). A line is terminated by a LF char. Neither LF nor CR chars are - * stored in buffer. - */ -static int read_line(int fd, char* buffer, int buffer_size) -{ - int count = 0; - int num_read = 0; - - errno = 0; - - while (count < buffer_size) - { - unsigned char c; - - if (1 != read(fd, &c, 1)) - break; - - num_read++; - - if ( c == '\n' ) - break; - - if ( c == '\r' ) - continue; - - buffer[count++] = c; - } - - buffer[MIN(count, buffer_size - 1)] = 0; - - return errno ? -1 : num_read; -} - /* parse a line from a configuration file. the line format is: setting name: setting value |