diff options
author | Cedric BAIL <cedric.bail@free.fr> | 2012-06-29 10:45:58 +0000 |
---|---|---|
committer | Cedric BAIL <cedric.bail@free.fr> | 2012-06-29 10:45:58 +0000 |
commit | faa4287716acd92d9ada8f711035b796835e9997 (patch) | |
tree | 039f4da867507b9e6cb11391c06133c46c7bd3d1 | |
parent | 09eb6e340f18e4e834d028b44cf1edf99b4e6ca8 (diff) | |
download | eina-faa4287716acd92d9ada8f711035b796835e9997.tar.gz |
eina: also track lines index.
SVN revision: 73029
-rw-r--r-- | src/include/eina_file.h | 1 | ||||
-rw-r--r-- | src/lib/eina_file.c | 10 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/include/eina_file.h b/src/include/eina_file.h index 246410f..0518c12 100644 --- a/src/include/eina_file.h +++ b/src/include/eina_file.h @@ -204,6 +204,7 @@ struct _Eina_File_Lines struct { const char *start; const char *end; + unsigned int index; } line; unsigned long long length; }; diff --git a/src/lib/eina_file.c b/src/lib/eina_file.c index 33137cc..b5dd5cd 100644 --- a/src/lib/eina_file.c +++ b/src/lib/eina_file.c @@ -1175,13 +1175,20 @@ static Eina_Bool _eina_file_map_lines_iterator_next(Eina_Lines_Iterator *it, void **data) { const char *eol; + unsigned char match; if (it->current.line.end >= it->end) return EINA_FALSE; + match = *it->current.line.end; while ((*it->current.line.end == '\n' || *it->current.line.end == '\r') && it->current.line.end < it->end) - it->current.line.end++; + { + if (match == *it->current.line.end) + it->current.line.index++; + it->current.line.end++; + } + it->current.line.index++; if (it->current.line.end == it->end) return EINA_FALSE; @@ -1246,6 +1253,7 @@ eina_file_map_lines(Eina_File *file) it->boundary = 4096; it->current.line.start = it->map; it->current.line.end = it->current.line.start; + it->current.line.index = 0; it->current.length = 0; it->end = it->map + it->fp->length; |