initial commit
[dos_auplay] / src / aufile.c
1 #include <stdio.h>\r
2 #include <stdlib.h>\r
3 #include <string.h>\r
4 #include <errno.h>\r
5 #include "aufile.h"\r
6 \r
7 int au_open_wav(struct au_file *au);\r
8 \r
9 struct au_file *au_open(const char *fname)\r
10 {\r
11         FILE *fp;\r
12         struct au_file *au;\r
13 \r
14         if(!(fp = fopen(fname, "rb"))) {\r
15                 fprintf(stderr, "au_open: failed to open file: %s: %s\n", fname, strerror(errno));\r
16                 return 0;\r
17         }\r
18 \r
19         if(!(au = malloc(sizeof *au))) {\r
20                 fclose(fp);\r
21                 fprintf(stderr, "au_open: failed to allocate file structure: %s\n", strerror(errno));\r
22                 return 0;\r
23         }\r
24         au->fp = fp;\r
25 \r
26         if(au_open_wav(au) != -1) {\r
27                 return au;\r
28         }\r
29 \r
30         fprintf(stderr, "au_open: invalid file: %s\n", fname);\r
31         fclose(fp);\r
32         free(au);\r
33         return 0;\r
34 }\r
35 \r
36 void au_close(struct au_file *au)\r
37 {\r
38         au->close(au);\r
39         fclose(au->fp);\r
40         free(au);\r
41 }\r
42 \r
43 void au_reset(struct au_file *au)\r
44 {\r
45         au->reset(au);\r
46 }\r
47 \r
48 int au_read(struct au_file *au, void *buf, int size)\r
49 {\r
50         return au->read(au, buf, size);\r
51 }\r