I am using mongoose 6.13 and I encountered a situation that can caused some what the ... moments.
Imagine the following situation on a Linux (possibly other as well) platform.
#include <system includes> #include "mongoose.h" ... cs_stat_t st; mg_stat(filename, &st);
My code acted up with what seemed to be a stack corruption. And indeed it was.
- the system includes defined
- as the
_FILE_OFFSET_BITS was not defined a system default was used, which in my case was 32-bit
- the mongoose.h typedef'ed it to
- my code passed a
struct stat with 32 bit file offsets as the second
In mongoose.c however something other happened. mongoose.h contains
#ifndef _FILE_OFFSET_BITS #define _FILE_OFFSET_BITS 64 #endif
and includes the system stuff after this. The
mg_stat thus used
struct stat expecting 64-bit file offsets and clobbered 8 more bytes at the
Moving the mongoose.h before the rest fixed the problem.
Frankly I have no idea whether this is a bug or not. To me it looks like forcing the define is a bad idea and it would be better to use the system default unless the user did explicitely set it but maybe there is some good reason to do that. This post should at least help someone encountering this.