]> git.donarmstrong.com Git - lilypond.git/blobdiff - lib/simple-file-storage.cc
release: 0.1.11
[lilypond.git] / lib / simple-file-storage.cc
index 2f72a4efc05c5b7d831e6dbb8be19ead73ff367e..ed1784ba63963abdafee6ef40746eb0ac7eba55e 100644 (file)
   Stupid but foolproof way of opening files.
 
   TODO 
-  Should use obstack. Should check IO status
+  Should check IO status
 
   This is of course a build it yourself version of mmap, so we should
   have been using that... (see Mapped_file_storage) But we noticed
   some problems with this (unexplained lexer crashes)
   
-  */
+  [Some versions later] The crashes aren't caused by the mmap
+  code. But no reason to take it out, is there?  */
 
 Simple_file_storage::Simple_file_storage(String s)
 {
-    data_p_ =0;
-    FILE * f = fopen ( s.ch_C(), "r");
-    if ( !f ) 
-      {
-       warning("can't open file\n");
-       return ;
-      }
+  data_p_ =0;
+  /*
+    let's hope that "b" opens anything binary, and does not apply 
+    CR/LF translation
+    */
+  FILE * f = fopen (s.ch_C(), "rb");
+  if (!f) 
+    {
+      warning("can't open file\n");
+      return ;
+    }
 
-    int ret = fseek( f, 0, SEEK_END);
-    len_i_ = ftell(f);
-    rewind(f);
-    data_p_ = new char[len_i_+1];
-    data_p_[len_i_] = 0;
-    ret = fread(data_p_, sizeof(char), len_i_, f);
-#ifndef __CYGWIN32__ // ugh, \r\n -> \n translation
-    assert (ret==len_i_);
+  int ret = fseek(f, 0, SEEK_END);
+  len_i_ = ftell(f);
+  rewind(f);
+  data_p_ = new char[len_i_+1];
+  data_p_[len_i_] = 0;
+  ret = fread(data_p_, sizeof(char), len_i_, f);
+
+     
+#if 1 // ugh, \r\n -> \n translation
+  assert (ret==len_i_);
 #endif
-    fclose(f);
+  fclose(f);
 }
 
 char const*
 Simple_file_storage::ch_C() const
 {
-    return data_p_;
+  return data_p_;
 }
 
 int
-Simple_file_storage::length_i()const
+Simple_file_storage::length_i() const
 {
-    return len_i_;
+  return len_i_;
 }
     
 
 Simple_file_storage::~Simple_file_storage()
 {
-    delete []data_p_;
+  delete []data_p_;
 }