/** * Get one line from specific stream with delimiter. */ bool_t string_getline_delimiter(string_t* pstr_string, FILE* fp_stream, char c_delimiter) { int n_char = EOF; assert(pstr_string != NULL); assert(fp_stream != NULL); if(c_delimiter == '\n') { return string_getline(pstr_string, fp_stream); } else { clearerr(fp_stream); string_clear(pstr_string); while(!feof(fp_stream) && !ferror(fp_stream) && (char)n_char != c_delimiter && string_size(pstr_string) < string_max_size(pstr_string)) { n_char = fgetc(fp_stream); if((char)n_char != c_delimiter && n_char != EOF) { string_push_back(pstr_string, (char)n_char); } } if((char)n_char == c_delimiter) { return true; } else { return false; } } }
/** * Get one line from specific stream. */ bool_t string_getline(string_t* pstr_string, FILE* fp_stream) { int n_char = EOF; #ifdef _WIN32 int n_prevchar = EOF; #endif assert(pstr_string != NULL); assert(fp_stream != NULL); clearerr(fp_stream); string_clear(pstr_string); while (!feof(fp_stream) && !ferror(fp_stream) && n_char != '\n' && string_size(pstr_string) < string_max_size(pstr_string)) { n_char = fgetc(fp_stream); if (n_char != '\n' && n_char != EOF) { #ifdef _WIN32 /* new line is '\r\n' in Windows */ if (n_prevchar != EOF) { assert(n_prevchar == '\r'); string_push_back(pstr_string, (char)n_prevchar); n_prevchar = EOF; } if (n_char == '\r') { assert(n_prevchar == EOF); n_prevchar = n_char; } else { string_push_back(pstr_string, (char)n_char); } #else string_push_back(pstr_string, (char)n_char); #endif } } #ifdef _WIN32 if (feof(fp_stream)) { if (n_prevchar != EOF) { assert(n_prevchar == '\r'); string_push_back(pstr_string, (char)n_prevchar); n_prevchar = EOF; } return false; } #endif return (char)n_char == '\n' ? true : false; }
/** * Read the character string from specific stream. */ void string_input(string_t* pstr_string, FILE* fp_stream) { int n_char = EOF; assert(pstr_string != NULL); assert(fp_stream != NULL); clearerr(fp_stream); string_clear(pstr_string); while (!feof(fp_stream) && !ferror(fp_stream) && string_size(pstr_string) < string_max_size(pstr_string)) { if ((n_char = fgetc(fp_stream)) != EOF) { string_push_back(pstr_string, (char)n_char); } } }