diff --git a/libmaxsi/Makefile b/libmaxsi/Makefile
index 85ab8d37..63204f5d 100644
--- a/libmaxsi/Makefile
+++ b/libmaxsi/Makefile
@@ -69,6 +69,8 @@ ftello.o \
fwritable.o \
fwrite.o \
fwriting.o \
+getdelim.o \
+getline.o \
heap.o \
integer.o \
mbtowc.o \
diff --git a/libmaxsi/getdelim.cpp b/libmaxsi/getdelim.cpp
new file mode 100644
index 00000000..3b82a811
--- /dev/null
+++ b/libmaxsi/getdelim.cpp
@@ -0,0 +1,63 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ getdelim.cpp
+ Delimited string input.
+
+*******************************************************************************/
+
+#include
+#include
+#include
+
+ssize_t getdelim(char** lineptr, size_t* n, int delim, FILE* fp)
+{
+ if ( !lineptr || (*lineptr && !n) || !fp ) { errno = EINVAL; return -1; }
+ const size_t DEFAULT_BUFSIZE = 32UL;
+ int malloced = !*lineptr;
+ if ( malloced ) { *lineptr = (char*) malloc(DEFAULT_BUFSIZE); }
+ if ( !*lineptr ) { return -1; }
+ size_t bufsize = malloced ? DEFAULT_BUFSIZE : *n;
+ if ( n ) { *n = bufsize; }
+ ssize_t written = 0;
+ int c;
+ do
+ {
+ if ( (c = getc(fp)) == EOF )
+ {
+ if ( written ) { break; } else { goto cleanup; }
+ }
+ if ( bufsize <= (size_t) written + 1UL )
+ {
+ size_t newbufsize = 2UL * bufsize;
+ char* newbuf = (char*) realloc(*lineptr, newbufsize);
+ if ( !newbuf ) { goto cleanup; }
+ bufsize = newbufsize;
+ if ( n ) { *n = bufsize; }
+ *lineptr = newbuf;
+ }
+ (*lineptr)[written++] = c;
+ } while ( c != delim );
+ (*lineptr)[written] = 0;
+ return written;
+
+cleanup:
+ free(malloced ? *lineptr : NULL);
+ return -1;
+}
diff --git a/libmaxsi/getline.cpp b/libmaxsi/getline.cpp
new file mode 100644
index 00000000..68b294b8
--- /dev/null
+++ b/libmaxsi/getline.cpp
@@ -0,0 +1,30 @@
+/*******************************************************************************
+
+ Copyright(C) Jonas 'Sortie' Termansen 2011, 2012.
+
+ This file is part of LibMaxsi.
+
+ LibMaxsi is free software: you can redistribute it and/or modify it under
+ the terms of the GNU Lesser General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with LibMaxsi. If not, see .
+
+ getline.cpp
+ Reads a line from a FILE.
+
+*******************************************************************************/
+
+#include
+
+ssize_t getline(char** lineptr, size_t* n, FILE* fp)
+{
+ return getdelim(lineptr, n, '\n', fp);
+}
diff --git a/libmaxsi/stdio.c b/libmaxsi/stdio.c
index 2fd512e1..ecd49812 100644
--- a/libmaxsi/stdio.c
+++ b/libmaxsi/stdio.c
@@ -51,47 +51,6 @@ int putchar(int c)
return fputc(c, stdout);
}
-ssize_t getdelim(char** lineptr, size_t* n, int delim, FILE* fp)
-{
- if ( !lineptr || (*lineptr && !n) || !fp ) { errno = EINVAL; return -1; }
- const size_t DEFAULT_BUFSIZE = 32UL;
- int malloced = !*lineptr;
- if ( malloced ) { *lineptr = (char*) malloc(DEFAULT_BUFSIZE); }
- if ( !*lineptr ) { return -1; }
- size_t bufsize = malloced ? DEFAULT_BUFSIZE : *n;
- if ( n ) { *n = bufsize; }
- ssize_t written = 0;
- int c;
- do
- {
- if ( (c = getc(fp)) == EOF )
- {
- if ( written ) { break; } else { goto cleanup; }
- }
- if ( bufsize <= (size_t) written + 1UL )
- {
- size_t newbufsize = 2UL * bufsize;
- char* newbuf = (char*) realloc(*lineptr, newbufsize);
- if ( !newbuf ) { goto cleanup; }
- bufsize = newbufsize;
- if ( n ) { *n = bufsize; }
- *lineptr = newbuf;
- }
- (*lineptr)[written++] = c;
- } while ( c != delim );
- (*lineptr)[written] = 0;
- return written;
-
-cleanup:
- free(malloced ? *lineptr : NULL);
- return -1;
-}
-
-ssize_t getline(char** lineptr, size_t* n, FILE* fp)
-{
- return getdelim(lineptr, n, '\n', fp);
-}
-
char* sortix_gets(void)
{
char* buf = NULL;
@@ -106,4 +65,3 @@ int puts(const char* str)
{
return printf("%s\n", str) < 0 ? EOF : 1;
}
-