Beispiel #1
0
/**
 * 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;
        }
    }
}
Beispiel #2
0
/**
 * 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;
}
Beispiel #3
0
/**
 * 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);
        }
    }
}