1 /*************************************************************************/
2 /*                                                                       */
3 /*                           Cepstral, LLC                               */
4 /*                        Copyright (c) 2001                             */
5 /*                        All Rights Reserved.                           */
6 /*                                                                       */
7 /*  Permission is hereby granted, free of charge, to use and distribute  */
8 /*  this software and its documentation without restriction, including   */
9 /*  without limitation the rights to use, copy, modify, merge, publish,  */
10 /*  distribute, sublicense, and/or sell copies of this work, and to      */
11 /*  permit persons to whom this work is furnished to do so, subject to   */
12 /*  the following conditions:                                            */
13 /*   1. The code must retain the above copyright notice, this list of    */
14 /*      conditions and the following disclaimer.                         */
15 /*   2. Any modifications must be clearly marked as such.                */
16 /*   3. Original authors' names are not deleted.                         */
17 /*   4. The authors' names are not used to endorse or promote products   */
18 /*      derived from this software without specific prior written        */
19 /*      permission.                                                      */
20 /*                                                                       */
21 /*  CEPSTRAL, LLC AND THE CONTRIBUTORS TO THIS WORK DISCLAIM ALL         */
22 /*  WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED       */
23 /*  WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL         */
24 /*  CEPSTRAL, LLC NOR THE CONTRIBUTORS BE LIABLE FOR ANY SPECIAL,        */
25 /*  INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER          */
26 /*  RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION    */
27 /*  OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR  */
28 /*  IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.          */
29 /*                                                                       */
30 /*************************************************************************/
31 /*             Author:  David Huggins-Daines (dhd@cepstral.com)          */
32 /*               Date:  October 2001                                     */
33 /*************************************************************************/
34 /*                                                                       */
35 /* cst_mmap_none.c: stubs for systems with no memory-mapped I/O support. */
36 /*                                                                       */
37 /*************************************************************************/
38 
39 #include "cst_file.h"
40 #include "cst_error.h"
41 #include "cst_alloc.h"
42 
cst_mmap_file(const char * path)43 cst_filemap *cst_mmap_file(const char *path)
44 {
45     cst_dbgmsg("cst_mmap_file: unsupported on this platform");
46     cst_error();
47 
48     return NULL;
49 }
50 
cst_munmap_file(cst_filemap * fmap)51 int cst_munmap_file(cst_filemap *fmap)
52 {
53     cst_dbgmsg("cst_munmap_file: unsupported on this platform");
54     cst_error();
55 
56     return -1;
57 }
58 
cst_read_whole_file(const char * path)59 cst_filemap *cst_read_whole_file(const char *path)
60 {
61     cst_filemap *fmap;
62     cst_file fh;
63 
64     if ((fh = cst_fopen(path, CST_OPEN_READ)) < 0) {
65 	cst_errmsg("cst_read_whole_file: Failed to open file\n");
66 	return NULL;
67     }
68 
69     fmap = cst_alloc(cst_filemap, 1);
70     fmap->fh = fh;
71     fmap->mapsize = cst_filesize(fmap->fh);
72     fmap->mem = cst_alloc(char, fmap->mapsize);
73     if (cst_fread(fmap->fh, fmap->mem, 1, fmap->mapsize) < fmap->mapsize)
74     {
75 	cst_errmsg("cst_read_whole_file: read() failed\n");
76 	cst_fclose(fmap->fh);
77 	cst_free(fmap->mem);
78 	cst_free(fmap);
79 	return NULL;
80     }
81 
82     return fmap;
83 }
84 
cst_free_whole_file(cst_filemap * fmap)85 int cst_free_whole_file(cst_filemap *fmap)
86 {
87     if (cst_fclose(fmap->fh) < 0) {
88 	cst_errmsg("cst_free_whole_file: close() failed\n");
89 	return -1;
90     }
91     cst_free(fmap->mem);
92     cst_free(fmap);
93     return 0;
94 }
95 
cst_read_part_file(const char * path)96 cst_filemap *cst_read_part_file(const char *path)
97 {
98     cst_filemap *fmap;
99     cst_file fh;
100 
101     if ((fh = cst_fopen(path, CST_OPEN_READ)) == NULL) {
102 	cst_errmsg("cst_read_part_file: Failed to open file\n");
103 	return NULL;
104     }
105 
106     fmap = cst_alloc(cst_filemap, 1);
107     fmap->fh = fh;
108     fmap->mapsize = cst_filesize(fmap->fh);
109 
110     return fmap;
111 }
112 
cst_free_part_file(cst_filemap * fmap)113 int cst_free_part_file(cst_filemap *fmap)
114 {
115     if (cst_fclose(fmap->fh) < 0) {
116 	cst_errmsg("cst_munmap_file: cst_fclose() failed\n");
117 	return -1;
118     }
119     cst_free(fmap);
120     return 0;
121 }
122