Cygwin: mq_open: set filesize using ftruncate

ftruncate is leaner than lseek/write.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2021-04-30 18:15:20 +02:00
parent 2d34164402
commit 715c4208e4
1 changed files with 3 additions and 3 deletions

View File

@ -23,6 +23,8 @@ details. */
#include <mqueue.h> #include <mqueue.h>
#include <semaphore.h> #include <semaphore.h>
extern "C" int ftruncate64 (int fd, off_t length);
/* The prefix_len is the length of the path prefix ncluding trailing "/" /* The prefix_len is the length of the path prefix ncluding trailing "/"
(or "/sem." for semaphores) as well as the trailing NUL. */ (or "/sem." for semaphores) as well as the trailing NUL. */
static struct static struct
@ -471,9 +473,7 @@ mq_open (const char *name, int oflag, ...)
msgsize = MSGSIZE (attr->mq_msgsize); msgsize = MSGSIZE (attr->mq_msgsize);
filesize = sizeof (struct mq_hdr) filesize = sizeof (struct mq_hdr)
+ (attr->mq_maxmsg * (sizeof (struct msg_hdr) + msgsize)); + (attr->mq_maxmsg * (sizeof (struct msg_hdr) + msgsize));
if (lseek64 (fd, filesize - 1, SEEK_SET) == -1) if (ftruncate64 (fd, filesize) == -1)
__leave;
if (write (fd, "", 1) == -1)
__leave; __leave;
/* Memory map the file */ /* Memory map the file */