/* Test of ftell() function.
- Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+ Copyright (C) 2007-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <config.h>
+/* None of the files accessed by this test are large, so disable the
+ fseek link warning if we are not using the gnulib fseek module. */
+#define _GL_NO_LARGE_FILES
#include <stdio.h>
-#include <stdlib.h>
+
+#include "signature.h"
+SIGNATURE_CHECK (ftell, long, (FILE *));
#include "binary-io.h"
+#include "macros.h"
-#define ASSERT(expr) \
- do \
- { \
- if (!(expr)) \
- { \
- fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \
- fflush (stderr); \
- abort (); \
- } \
- } \
- while (0)
+#ifndef FUNC_UNGETC_BROKEN
+# define FUNC_UNGETC_BROKEN 0
+#endif
int
main (int argc, char **argv)
ASSERT (ch == '@');
ASSERT (ftell (stdin) == 3);
- /* Test ftell after ungetc without read. */
- ASSERT (fseek (stdin, 0, SEEK_CUR) == 0);
- ASSERT (ftell (stdin) == 3);
-
- ch = ungetc ('~', stdin);
- ASSERT (ch == '~');
- ASSERT (ftell (stdin) == 2);
+ if (2 < argc)
+ {
+ if (FUNC_UNGETC_BROKEN)
+ {
+ fputs ("Skipping test: ungetc cannot handle arbitrary bytes\n",
+ stderr);
+ return 77;
+ }
+ /* Test ftell after ungetc without read. */
+ ASSERT (fseek (stdin, 0, SEEK_CUR) == 0);
+ ASSERT (ftell (stdin) == 3);
+
+ ch = ungetc ('~', stdin);
+ ASSERT (ch == '~');
+ ASSERT (ftell (stdin) == 2);
+ }
+#if !defined __MINT__ /* FreeMiNT has problems seeking past end of file */
/* Test ftell beyond end of file. */
ASSERT (fseek (stdin, 0, SEEK_END) == 0);
ch = ftell (stdin);
ASSERT (fseek (stdin, 10, SEEK_END) == 0);
ASSERT (ftell (stdin) == ch + 10);
+#endif
return 0;
}