]> git.donarmstrong.com Git - lilypond.git/blob - lily/streams.cc
3214cabcfa164f16c4bcfb05a104a9b6ac6494d1
[lilypond.git] / lily / streams.cc
1 #include "config.h"
2
3 #include <stdlib.h>
4 #include <errno.h>
5 #include <sys/types.h>
6 #if HAVE_SYS_STAT_H 
7 #include <sys/stat.h>
8 #endif
9
10 #include <iostream>
11 #include <fstream>
12
13 #include "stream.hh"
14 #include "file-path.hh"
15 #include "warn.hh"
16 #include "main.hh"
17
18 #if __GNUC__ > 2
19 std::ostream *
20 open_file_stream (String filename, std::ios_base::openmode mode)
21 #else
22 std::ostream *
23 open_file_stream (String filename, int mode)
24 #endif
25 {
26   std::ostream *os;
27   if ((filename == "-"))
28     os = &std::cout;
29   else
30     {
31       Path p = split_path (filename);
32       if (!p.dir.empty_b ())
33         if (mkdir (p.dir.ch_C (), 0777) == -1 && errno != EEXIST)
34           error (_f ("can't create directory: `%s'", p.dir));
35       os = new std::ofstream (filename.ch_C (), mode);
36     }
37   if (!*os)
38     error (_f ("can't open file: `%s'", filename));
39   return os;
40 }
41
42 void
43 close_file_stream (std::ostream *os)
44 {
45   *os << std::flush;
46   if (!*os)
47     {
48       warning (_ ("Error syncing file (disk full?)"));
49       exit_status_global = 1;
50     }
51   if (os != &std::cout)
52     delete os;
53   os = 0;
54 }