Set executable permissions when creating .exe/.com files.
diff --git a/server/file.c b/server/file.c
index 4c5c5f8..8a96630 100644
--- a/server/file.c
+++ b/server/file.c
@@ -126,6 +126,7 @@
struct stat st;
char *name;
int fd = -1;
+ mode_t mode;
if (!(name = mem_alloc( len + 1 ))) return NULL;
memcpy( name, nameptr, len );
@@ -151,10 +152,14 @@
case GENERIC_WRITE: flags |= O_WRONLY; break;
case GENERIC_READ|GENERIC_WRITE: flags |= O_RDWR; break;
}
+ mode = (attrs & FILE_ATTRIBUTE_READONLY) ? 0444 : 0666;
+
+ if (len >= 4 &&
+ (!strcasecmp( name + len - 4, ".exe" ) || !strcasecmp( name + len - 4, ".com" )))
+ mode |= 0111;
/* FIXME: should set error to STATUS_OBJECT_NAME_COLLISION if file existed before */
- if ((fd = open( name, flags | O_NONBLOCK | O_LARGEFILE,
- (attrs & FILE_ATTRIBUTE_READONLY) ? 0444 : 0666 )) == -1)
+ if ((fd = open( name, flags | O_NONBLOCK | O_LARGEFILE, mode )) == -1 )
goto file_error;
/* refuse to open a directory */
if (fstat( fd, &st ) == -1) goto file_error;