浏览代码

Using O_BINARY on win32 for uploaded files

Sergey Lyubka 12 年之前
父节点
当前提交
d8424726bb
共有 2 个文件被更改,包括 7 次插入3 次删除
  1. 1 0
      examples/Makefile
  2. 6 3
      examples/upload.c

+ 1 - 0
examples/Makefile

@@ -17,6 +17,7 @@ CLFLAGS = /MD /TC /nologo $(DBG) /W3 /DNO_SSL \
         /link /incremental:no /libpath:$(MSVC)/lib /machine:IX86
 
 windows:
+	$(CL) upload.c ../mongoose.c $(CLFLAGS)
 	$(CL) hello.c ../mongoose.c $(CLFLAGS)
 	$(CL) upload.c ../mongoose.c $(CLFLAGS)
 	$(CL) post.c ../mongoose.c $(CLFLAGS)

+ 6 - 3
examples/upload.c

@@ -12,9 +12,12 @@
 typedef __int64 int64_t;
 #define O_CLOEXEC 0
 #define O_EXLOCK 0
-#else 
+#else
 #include <inttypes.h>
 #include <unistd.h>
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
 #endif // !_WIN32
 
 #include "mongoose.h"
@@ -27,7 +30,7 @@ static const char *html_form =
   "<input type=\"file\" name=\"file\" /> <br/>"
   "<input type=\"submit\" value=\"Upload\" />"
   "</form></body></html>";
- 
+
 static const char *HTTP_500 = "HTTP/1.0 500 Server Error\r\n\r\n";
 
 static void handle_file_upload(struct mg_connection *conn) {
@@ -82,7 +85,7 @@ static void handle_file_upload(struct mg_connection *conn) {
     mg_printf(conn, "%s%s", HTTP_500, "Can't get file name");
   } else if (cl <= 0) {
     mg_printf(conn, "%s%s", HTTP_500, "Empty file");
-  } else if ((fd = open(path, O_CREAT | O_TRUNC |
+  } else if ((fd = open(path, O_CREAT | O_TRUNC | O_BINARY |
                         O_WRONLY | O_EXLOCK | O_CLOEXEC)) < 0) {
     // We're opening the file with exclusive lock held. This guarantee us that
     // there is no other thread can save into the same file simultaneously.