Chris@0
|
1 /*
|
Chris@0
|
2 ** Copyright (C) 2001-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
|
Chris@0
|
3 **
|
Chris@0
|
4 ** This program is free software; you can redistribute it and/or modify
|
Chris@0
|
5 ** it under the terms of the GNU General Public License as published by
|
Chris@0
|
6 ** the Free Software Foundation; either version 2 of the License, or
|
Chris@0
|
7 ** (at your option) any later version.
|
Chris@0
|
8 **
|
Chris@0
|
9 ** This program is distributed in the hope that it will be useful,
|
Chris@0
|
10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Chris@0
|
11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Chris@0
|
12 ** GNU General Public License for more details.
|
Chris@0
|
13 **
|
Chris@0
|
14 ** You should have received a copy of the GNU General Public License
|
Chris@0
|
15 ** along with this program; if not, write to the Free Software
|
Chris@0
|
16 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Chris@0
|
17 */
|
Chris@0
|
18
|
Chris@0
|
19 /*==========================================================================
|
Chris@0
|
20 ** This is a test program which tests reading from stdin and writing to
|
Chris@0
|
21 ** stdout.
|
Chris@0
|
22 */
|
Chris@0
|
23
|
Chris@0
|
24 #include "sfconfig.h"
|
Chris@0
|
25
|
Chris@0
|
26 #include <stdio.h>
|
Chris@0
|
27 #include <stdlib.h>
|
Chris@0
|
28 #include <string.h>
|
Chris@0
|
29
|
Chris@0
|
30 #if HAVE_UNISTD_H
|
Chris@0
|
31 #include <unistd.h>
|
Chris@0
|
32 #endif
|
Chris@0
|
33
|
Chris@0
|
34 #include <sys/types.h>
|
Chris@0
|
35 #include <sys/stat.h>
|
Chris@0
|
36
|
Chris@0
|
37 #if HAVE_SYS_WAIT_H
|
Chris@0
|
38 #include <sys/wait.h>
|
Chris@0
|
39 #endif
|
Chris@0
|
40
|
Chris@0
|
41 #include "utils.h"
|
Chris@0
|
42
|
Chris@0
|
43 /* EMX is OS/2. */
|
Chris@0
|
44 #if (OS_IS_WIN32) || defined (__EMX__)
|
Chris@0
|
45
|
Chris@0
|
46 int
|
Chris@0
|
47 main (void)
|
Chris@0
|
48 {
|
Chris@0
|
49 puts (" stdio_test : this test doesn't work on win32.") ;
|
Chris@0
|
50 return 0 ;
|
Chris@0
|
51 } /* main */
|
Chris@0
|
52
|
Chris@0
|
53 #else
|
Chris@0
|
54
|
Chris@0
|
55 #ifndef WIFEXITED
|
Chris@0
|
56 #define WIFEXITED(s) (((s) & 0xff) == 0)
|
Chris@0
|
57 #endif
|
Chris@0
|
58 #ifndef WEXITSTATUS
|
Chris@0
|
59 #define WEXITSTATUS(s) (((s) & 0xff00) >> 8)
|
Chris@0
|
60 #endif
|
Chris@0
|
61
|
Chris@0
|
62
|
Chris@0
|
63 static size_t file_length (const char *filename) ;
|
Chris@0
|
64 static int file_exists (const char *filename) ;
|
Chris@0
|
65 static void stdio_test (const char *filetype) ;
|
Chris@0
|
66
|
Chris@0
|
67 static const char *filetypes [] =
|
Chris@0
|
68 { "raw", "wav", "aiff", "au", "paf", "svx", "nist", "ircam",
|
Chris@0
|
69 "voc", "w64", "mat4", "mat5", "pvf",
|
Chris@0
|
70 NULL
|
Chris@0
|
71 } ;
|
Chris@0
|
72
|
Chris@0
|
73 int
|
Chris@0
|
74 main (void)
|
Chris@0
|
75 { int k ;
|
Chris@0
|
76
|
Chris@0
|
77 if (file_exists ("libsndfile.spec.in"))
|
Chris@0
|
78 exit_if_true (chdir ("tests") != 0, "\n Error : chdir ('tests') failed.\n") ;
|
Chris@0
|
79
|
Chris@0
|
80 for (k = 0 ; filetypes [k] ; k++)
|
Chris@0
|
81 stdio_test (filetypes [k]) ;
|
Chris@0
|
82
|
Chris@0
|
83 return 0 ;
|
Chris@0
|
84 } /* main */
|
Chris@0
|
85
|
Chris@0
|
86
|
Chris@0
|
87 static void
|
Chris@0
|
88 stdio_test (const char *filetype)
|
Chris@0
|
89 { static char buffer [256] ;
|
Chris@0
|
90
|
Chris@0
|
91 int file_size, retval ;
|
Chris@0
|
92
|
Chris@0
|
93 print_test_name ("stdio_test", filetype) ;
|
Chris@0
|
94
|
Chris@0
|
95 snprintf (buffer, sizeof (buffer), "./stdout_test %s > stdio.%s", filetype, filetype) ;
|
Chris@0
|
96 if ((retval = system (buffer)))
|
Chris@0
|
97 { retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
|
Chris@0
|
98 printf ("%s : %s", buffer, (strerror (retval))) ;
|
Chris@0
|
99 exit (1) ;
|
Chris@0
|
100 } ;
|
Chris@0
|
101
|
Chris@0
|
102 snprintf (buffer, sizeof (buffer), "stdio.%s", filetype) ;
|
Chris@0
|
103 if ((file_size = file_length (buffer)) < PIPE_TEST_LEN)
|
Chris@0
|
104 { printf ("\n Error : test file '%s' too small (%d).\n\n", buffer, file_size) ;
|
Chris@0
|
105 exit (1) ;
|
Chris@0
|
106 } ;
|
Chris@0
|
107
|
Chris@0
|
108 snprintf (buffer, sizeof (buffer), "./stdin_test %s < stdio.%s", filetype, filetype) ;
|
Chris@0
|
109 if ((retval = system (buffer)))
|
Chris@0
|
110 { retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
|
Chris@0
|
111 printf ("%s : %s", buffer, (strerror (retval))) ;
|
Chris@0
|
112 exit (1) ;
|
Chris@0
|
113 } ;
|
Chris@0
|
114
|
Chris@0
|
115 snprintf (buffer, sizeof (buffer), "rm stdio.%s", filetype) ;
|
Chris@0
|
116 if ((retval = system (buffer)))
|
Chris@0
|
117 { retval = WIFEXITED (retval) ? WEXITSTATUS (retval) : 1 ;
|
Chris@0
|
118 printf ("%s : %s", buffer, (strerror (retval))) ;
|
Chris@0
|
119 exit (1) ;
|
Chris@0
|
120 } ;
|
Chris@0
|
121
|
Chris@0
|
122 puts ("ok") ;
|
Chris@0
|
123
|
Chris@0
|
124 return ;
|
Chris@0
|
125 } /* stdio_test */
|
Chris@0
|
126
|
Chris@0
|
127
|
Chris@0
|
128
|
Chris@0
|
129
|
Chris@0
|
130 static size_t
|
Chris@0
|
131 file_length (const char *filename)
|
Chris@0
|
132 { struct stat buf ;
|
Chris@0
|
133
|
Chris@0
|
134 if (stat (filename, &buf))
|
Chris@0
|
135 { perror (filename) ;
|
Chris@0
|
136 exit (1) ;
|
Chris@0
|
137 } ;
|
Chris@0
|
138
|
Chris@0
|
139 return buf.st_size ;
|
Chris@0
|
140 } /* file_length */
|
Chris@0
|
141
|
Chris@0
|
142 static int
|
Chris@0
|
143 file_exists (const char *filename)
|
Chris@0
|
144 { struct stat buf ;
|
Chris@0
|
145
|
Chris@0
|
146 if (stat (filename, &buf))
|
Chris@0
|
147 return 0 ;
|
Chris@0
|
148
|
Chris@0
|
149 return 1 ;
|
Chris@0
|
150 } /* file_exists */
|
Chris@0
|
151
|
Chris@0
|
152 #endif
|
Chris@0
|
153
|