123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /* See LICENSE.txt for the full license governing this code. */
- /**
- * \file rwhelper.c
- *
- * Source file with some helper functions for working with SDL_RWops.
- */
- #include <SDL_test.h>
- #include "SDL_visualtest_sut_configparser.h"
- #include "SDL_visualtest_rwhelper.h"
- void
- SDLVisualTest_RWHelperResetBuffer(SDLVisualTest_RWHelperBuffer* buffer)
- {
- if(!buffer)
- {
- SDLTest_LogError("buffer argument cannot be NULL");
- return;
- }
- buffer->buffer_pos = 0;
- buffer->buffer_width = 0;
- }
- char
- SDLVisualTest_RWHelperReadChar(SDL_RWops* rw, SDLVisualTest_RWHelperBuffer* buffer)
- {
- if(!rw || !buffer)
- return 0;
- /* if the buffer has been consumed, we fill it up again */
- if(buffer->buffer_pos == buffer->buffer_width)
- {
- buffer->buffer_width = SDL_RWread(rw, buffer->buffer, 1, RWOPS_BUFFER_LEN);
- buffer->buffer_pos = 0;
- if(buffer->buffer_width == 0)
- return 0;
- }
- buffer->buffer_pos++;
- return buffer->buffer[buffer->buffer_pos - 1];
- }
- /* does not include new lines in the buffer and adds a trailing null character */
- char*
- SDLVisualTest_RWHelperReadLine(SDL_RWops* rw, char* str, int size,
- SDLVisualTest_RWHelperBuffer* buffer,
- char comment_char)
- {
- char ch;
- int current_pos, done;
- if(!rw)
- {
- SDLTest_LogError("rw argument cannot be NULL");
- return NULL;
- }
- if(!str)
- {
- SDLTest_LogError("str argument cannot be NULL");
- return NULL;
- }
- if(!buffer)
- {
- SDLTest_LogError("buffer argument cannot be NULL");
- return NULL;
- }
- if(size <= 0)
- {
- SDLTest_LogError("size argument should be positive");
- return NULL;
- }
- done = 0;
- while(!done)
- {
- /* ignore leading whitespace */
- for(ch = SDLVisualTest_RWHelperReadChar(rw, buffer); ch && SDL_isspace(ch);
- ch = SDLVisualTest_RWHelperReadChar(rw, buffer));
- for(current_pos = 0;
- ch && ch != '\n' && ch != '\r' && ch != comment_char;
- current_pos++)
- {
- str[current_pos] = ch;
- if(current_pos >= size - 2)
- {
- current_pos++;
- break;
- }
- ch = SDLVisualTest_RWHelperReadChar(rw, buffer);
- }
- done = 1;
- if(ch == comment_char) /* discard all characters until the next line */
- {
- do
- {
- ch = SDLVisualTest_RWHelperReadChar(rw, buffer);
- }while(ch && ch != '\n' && ch != '\r');
- if(current_pos == 0)
- done = 0;
- }
- }
- if(current_pos == 0)
- return NULL;
- str[current_pos] = '\0';
- return str;
- }
- /* Lines with all whitespace are ignored */
- int
- SDLVisualTest_RWHelperCountNonEmptyLines(SDL_RWops* rw,
- SDLVisualTest_RWHelperBuffer* buffer,
- char comment_char)
- {
- int num_lines = 0;
- char str[MAX_SUTOPTION_LINE_LENGTH];
- if(!rw)
- {
- SDLTest_LogError("rw argument cannot be NULL");
- return -1;
- }
- if(!buffer)
- {
- SDLTest_LogError("buffer argument cannot be NULL");
- return -1;
- }
- while(SDLVisualTest_RWHelperReadLine(rw, str, MAX_SUTOPTION_LINE_LENGTH,
- buffer, comment_char))
- num_lines++;
- return num_lines;
- }
|