aboutsummaryrefslogtreecommitdiff
path: root/winbuild
diff options
context:
space:
mode:
authordpeter99 <dpeter99@gmail.com>2018-03-26 20:17:16 +0200
committerGitHub <noreply@github.com>2018-03-26 20:17:16 +0200
commit52d5f303682fe75925efb9c5f842bd843b75c115 (patch)
tree1efacdfa380c287133820a0508044f00210d31c4 /winbuild
parentc47826bb1171083377309e356168b46cb3621df7 (diff)
parent7b6361a55e47dace4b1cfe36d8dba00a96424ad5 (diff)
downloadlibsurvive-52d5f303682fe75925efb9c5f842bd843b75c115.tar.gz
libsurvive-52d5f303682fe75925efb9c5f842bd843b75c115.tar.bz2
Merge pull request #1 from jdavidberger/win-update
Made playback work
Diffstat (limited to 'winbuild')
-rw-r--r--winbuild/getdelim.c149
-rw-r--r--winbuild/libsurvive/libsurvive.vcxproj2
-rw-r--r--winbuild/libsurvive/libsurvive.vcxproj.filters6
3 files changed, 157 insertions, 0 deletions
diff --git a/winbuild/getdelim.c b/winbuild/getdelim.c
new file mode 100644
index 0000000..ca808ab
--- /dev/null
+++ b/winbuild/getdelim.c
@@ -0,0 +1,149 @@
+/* Implementations of the getdelim() and getline() functions from POSIX 2008,
+ just in case your libc doesn't have them.
+
+ getdelim() reads from a stream until a specified delimiter is encountered.
+ getline() reads from a stream until a newline is encountered.
+
+ See: http://pubs.opengroup.org/onlinepubs/9699919799/functions/getdelim.html
+
+ NOTE: It is always the caller's responsibility to free the line buffer, even
+ when an error occurs.
+
+ Copyright (c) 2011 James E. Ingram
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+
+#if __STDC_VERSION__ >= 199901L
+/* restrict is a keyword */
+#else
+# define restrict
+#endif
+
+
+#ifndef _POSIX_SOURCE
+typedef long ssize_t;
+#define SSIZE_MAX LONG_MAX
+#endif
+
+
+ssize_t getdelim(char **restrict lineptr, size_t *restrict n, int delimiter,
+ FILE *restrict stream);
+ssize_t getline(char **restrict lineptr, size_t *restrict n,
+ FILE *restrict stream);
+
+
+
+#define _GETDELIM_GROWBY 128 /* amount to grow line buffer by */
+#define _GETDELIM_MINLEN 4 /* minimum line buffer size */
+
+
+ssize_t getdelim(char **restrict lineptr, size_t *restrict n, int delimiter,
+ FILE *restrict stream)
+{
+ char *buf, *pos;
+ int c;
+ ssize_t bytes;
+
+ if (lineptr == NULL || n == NULL) {
+ errno = EINVAL;
+ return -1;
+ }
+ if (stream == NULL) {
+ errno = EBADF;
+ return -1;
+ }
+
+ /* resize (or allocate) the line buffer if necessary */
+ buf = *lineptr;
+ if (buf == NULL || *n < _GETDELIM_MINLEN) {
+ buf = realloc(*lineptr, _GETDELIM_GROWBY);
+ if (buf == NULL) {
+ /* ENOMEM */
+ return -1;
+ }
+ *n = _GETDELIM_GROWBY;
+ *lineptr = buf;
+ }
+
+ /* read characters until delimiter is found, end of file is reached, or an
+ error occurs. */
+ bytes = 0;
+ pos = buf;
+ while ((c = getc(stream)) != EOF) {
+ if (bytes + 1 >= SSIZE_MAX) {
+ errno = EOVERFLOW;
+ return -1;
+ }
+ bytes++;
+ if (bytes >= *n - 1) {
+ buf = realloc(*lineptr, *n + _GETDELIM_GROWBY);
+ if (buf == NULL) {
+ /* ENOMEM */
+ return -1;
+ }
+ *n += _GETDELIM_GROWBY;
+ pos = buf + bytes - 1;
+ *lineptr = buf;
+ }
+
+ *pos++ = (char) c;
+ if (c == delimiter) {
+ break;
+ }
+ }
+
+ if (ferror(stream) || (feof(stream) && (bytes == 0))) {
+ /* EOF, or an error from getc(). */
+ return -1;
+ }
+
+ *pos = '\0';
+ return bytes;
+}
+
+
+ssize_t getline(char **restrict lineptr, size_t *restrict n,
+ FILE *restrict stream)
+{
+ return getdelim(lineptr, n, '\n', stream);
+}
+
+
+#ifdef _TEST_GETDELIM
+
+/* TODO: this isn't a very extensive test. */
+int main(void)
+{
+ char *line = NULL;
+ size_t n = 0;
+ while (getline(&line, &n, stdin) > 0) {
+ printf("%s", line);
+ }
+ return 0;
+}
+
+#endif
diff --git a/winbuild/libsurvive/libsurvive.vcxproj b/winbuild/libsurvive/libsurvive.vcxproj
index 3ce9dd3..bf1ae2d 100644
--- a/winbuild/libsurvive/libsurvive.vcxproj
+++ b/winbuild/libsurvive/libsurvive.vcxproj
@@ -163,12 +163,14 @@
<ClCompile Include="..\..\src\survive_default_devices.c" />
<ClCompile Include="..\..\src\survive_disambiguator.c" />
<ClCompile Include="..\..\src\survive_driverman.c" />
+ <ClCompile Include="..\..\src\survive_playback.c" />
<ClCompile Include="..\..\src\survive_process.c" />
<ClCompile Include="..\..\src\survive_reproject.c" />
<ClCompile Include="..\..\src\survive_sensor_activations.c" />
<ClCompile Include="..\..\src\survive_turveybiguator.c" />
<ClCompile Include="..\..\src\survive_usb.c" />
<ClCompile Include="..\..\src\survive_vive.c" />
+ <ClCompile Include="..\getdelim.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\include\libsurvive\poser.h" />
diff --git a/winbuild/libsurvive/libsurvive.vcxproj.filters b/winbuild/libsurvive/libsurvive.vcxproj.filters
index e96e220..d2dc6ba 100644
--- a/winbuild/libsurvive/libsurvive.vcxproj.filters
+++ b/winbuild/libsurvive/libsurvive.vcxproj.filters
@@ -108,6 +108,12 @@
<ClCompile Include="..\..\src\survive_sensor_activations.c">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\survive_playback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\getdelim.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\ootx_decoder.h">