]> git.lyx.org Git - lyx.git/blobdiff - src/support/copy.C
hopefully fix tex2lyx linking.
[lyx.git] / src / support / copy.C
index 2d994b8450e91549589467c5c5b5c30b40fd3e39..ceb2db196800006519a88b3be374f39fa484eae9 100644 (file)
 
 #include "support/lyxlib.h"
 
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+
 
 namespace lyx {
 
@@ -24,12 +31,35 @@ using std::ios;
 using std::string;
 
 
-bool lyx::support::copy(string const & from, string const & to)
+bool lyx::support::chmod(string const & file, unsigned long int mode)
+{
+#ifdef HAVE_CHMOD
+       if (::chmod(file.c_str(), mode_t(mode)) != 0)
+               return false;
+#else
+# ifdef WITH_WARNINGS
+#  warning "File permissions are ignored on this system."
+# endif
+#endif
+       return true;
+}
+
+
+bool lyx::support::copy(string const & from, string const & to, unsigned long int mode)
 {
        ifstream ifs(from.c_str(), ios::binary | ios::in);
        if (!ifs)
                return false;
 
+       if (mode != (unsigned long int)-1) {
+               ofstream ofs(to.c_str(), ios::binary | ios::out | ios::trunc);
+               if (!ofs)
+                       return false;
+               ofs.close();
+               if (!support::chmod(to, mode))
+                       return false;
+       }
+
        ofstream ofs(to.c_str(), ios::binary | ios::out | ios::trunc);
        if (!ofs)
                return false;