Comments (17)
Great, thank you. Working on patch. Any reason why you made mg_write static?
Original comment by valenok
on 21 May 2009 at 9:28
from mongoose.
Another question - does MS gives wince compiler for free? Can I setup WinCE
build
environment without paying them?
Original comment by valenok
on 21 May 2009 at 9:49
from mongoose.
Download Link for Microsoft eMbedded Visual C++:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=1dacdb3d
-50d1-41b2-a107-fa75ae960856
Original comment by [email protected]
on 21 May 2009 at 1:20
from mongoose.
Oops, mg_write should not be static. Sorry, it was meant for mgce_write.
Also, in mgce_open() there should be some code added to open files with
FILE_SHARE_READ when O_RDONLY is specified.
static int
mgce_open(const wchar_t *filename, int oflag, int pmode)
{
HANDLE hFile;
DWORD dwAccess = 0;
DWORD dwCreate = OPEN_EXISTING;
DWORD dwShare = 0;
pmode = 0; // unused
if(oflag & O_RDONLY) {
dwAccess |= GENERIC_READ;
dwShare = FILE_SHARE_READ;
}
if(oflag & O_WRONLY)
dwAccess |= GENERIC_WRITE;
if(oflag & O_CREAT)
dwCreate = OPEN_ALWAYS;
if(oflag & O_TRUNC)
dwCreate = CREATE_ALWAYS;
hFile = CreateFile(filename, dwAccess, dwShare, NULL, dwCreate,
FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
return -1;
return (int)hFile;
}
Original comment by [email protected]
on 21 May 2009 at 4:11
from mongoose.
May I request to fix couple of things and re-send the path, please? Things to
fix:
1. Identation - please follow the style like the rest of the code
2. Remove compiler warnings when building under Win32, like DeleteFile warning.
Thank you!
Original comment by valenok
on 22 May 2009 at 11:57
from mongoose.
OK, here is the well-formatted patch.
I still have some concerns about the following:
* The date_to_epoch() function does not account for timezone. I'm not sure
that this
causes any problems.
* Windows CE has no equivalent to SignalObjectAndWait that I could find. I
replaced
the call with a SetEvent call for Windows CE, but I am not sure that it is
enough.
Original comment by [email protected]
on 23 May 2009 at 7:33
Attachments:
from mongoose.
Brilliant, thank you.
I am trying to set up WinCE environment on my WinXP box.
If I do not manage to do it fast, I may take an iterative approach - I will
roll out
your patch with my changes (I will try to minimize the use of conditionals,
etc).
Then, if it accidentally breaks WinCE functionality, I request another patch
from you
- which will be considerably smaller.
Original comment by valenok
on 23 May 2009 at 5:43
from mongoose.
I have installed Microsoft eMbedded Visual C++ 4.0
It smells very much like good old Visual Studio 6, and it seems to lack C99
features.
Am I using the right thing?
Original comment by valenok
on 23 May 2009 at 8:20
from mongoose.
I use Microsoft Visual Studio 2005 Standard Edition and compile for the Pocket
PC
2003 platform. It has a better emulator than EVC4 and unlike VS2008 does not
require
the Professional version to build for smart devices.
The eMbedded Visual C++ 4.0 (EVC4) will also work; it is older, but it is free.
It
is best to install the latest Service Pack (SP4) when using EVC4, and you should
install the Pocket PC 2003 SDK.
Original comment by [email protected]
on 24 May 2009 at 2:17
from mongoose.
Going iterative path.
Submitted change http://code.google.com/p/mongoose/source/detail?r=381
o renamed all mgce_* functions to appropriate mg_* function, to avoid unnecessary
conditionals
o in some functions (start_thread(), pthread_mutex_wait()) adopted Win32 and WinCE
code to be WinCE friendly
o removed mgce_gmtime(), changed to localtime .. wonder if it was correct.
I think we should get rid of other WinCE conditionals around "struct tm" by
switching
the rest of the code to using WinCE way for printing time. Maybe print_time()
function must be introduced that does that.
Please sync and send another patch if I broke something (I am sure I did).
Original comment by valenok
on 24 May 2009 at 7:54
from mongoose.
Here are changes to make it compile and run again.
The challenges faced to compile in CE vs Windows:
- The only available Windows APIs are Unicode versions. There are a few exceptions,
like GetProcAddressA().
- Parts of the standard C runtime library are not implemented. Like these functions:
_open, _close, _write, _read, _lseek, time, mktime, strerror, _rename, _access,
strftime. Also there is no errno variable.
- There is no current directory, access to all data files is absolute.
The changes made in this patch:
- Functions that are replacements for missing C runtime functions are renamed ce_*
instead of mg_*. This is mostly due to a name conflict between mg_write and the
now
ce_write.
- There is now a bunch of fix-up defines for CE that map the standard C runtime
functions to the ce_* version.
- The ce_localtime function has a different signature the the standard localtime
function--this change allows the ce_localtime to be thread-safe without using
thread-local variables. The code using localtime is now ifdef'ed to allow for
the
difference.
- The function ce_gmtime was reintroduced. The strftime function does not exist in
CE. To simplify its replacement sprintf is used. Time zone information is not
in the
tm struct, so instead the timezone is hard coded to GMT and ce_gmtime is used.
- A missing semi-colon was fixed.
A print_time() function would be a good idea. I did not implement it here. The
buffer that is used for print_time should not be a 'static' buffer to improve
thread-safety. The buffer should either be passed in, or thread-local storage
would
be needed.
Original comment by [email protected]
on 10 Jun 2009 at 5:39
Attachments:
from mongoose.
Thanks! I have very little time these days to work on Mongoose; I will get back
to
your patch when I have a time span large enough to devour it.
Original comment by valenok
on 28 Jun 2009 at 8:55
- Changed state: Started
from mongoose.
Thanks!
I don't like ce_* defines, so I got rid of them.
Also, I refactored the code to use FILE * instead of file descriptors.
See http://code.google.com/p/mongoose/source/detail?r=438
It looks like that the only thing that is missing is strftime(). I've added a
stub.
Please verify the build.
Original comment by valenok
on 5 Jul 2009 at 9:45
from mongoose.
Would you be willing to change the calls to localtime() to localtime_r()? This
would
simplify coding it for CE in a thread safe way. Also, localtime() may not be
thread
safe on some environments.
Original comment by [email protected]
on 15 Sep 2009 at 10:20
from mongoose.
Yeah, makes sense. I'll look into that.
Original comment by valenok
on 16 Sep 2009 at 8:28
from mongoose.
Alright, here is another pass:
- Implemented strftime().
- Changed all calls to localtime() to localtime_r() for thread safety.
- Added CE implementation of dlsym(), CE uses wide chars for name.
- Replaced strtoull() define for strtoll(), for both Windows and CE.
- Fixed INT64_FMT format for both Windows and CE.
- CE lacks strtoi64() defined strtoll() to strtol()
- Found that all HTTP headers should be using GMT per RFC.
See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1
Causing the following changes:
- Reintroduced gmtime(), but this time as gmtime_r()
- date_to_epoch() does not need to determine DST
- date_to_epoch() cannot use mktime() because it is only for local time, it has
been changed to fill-in and return a struct tm.
- commpare_tm() added because of lack of mktime() for GMT.
- mktime() for CE removed, as it is unused now.
- send_file() uses "GMT" instead of "%Z" in date formatting
- send_file() uses gmtime_r() instead of localtime()
Original comment by [email protected]
on 17 Sep 2009 at 4:53
Attachments:
from mongoose.
Closing this until someone with WinCE environment want to revive it.
Original comment by valenok
on 20 Sep 2010 at 9:52
- Changed state: WontFix
from mongoose.
Related Issues (20)
- Make mongoose example fail (again)
- HTTP Range Request Issue
- Cross compiler for mips platform. error "can't resolve symbol '__sysv_signal'" HOT 3
- Feature req. Serve cgi script generated downloads HOT 1
- Mongoose Fails to start HTTPS under Windows HOT 5
- curl_easy_perform stuck using ssl HOT 1
- Lua with sqlite3 for saving unicode characters HOT 1
- SCRIPT_NAME not usable when cgi is called with path + query string HOT 9
- Random images not displaying in IE8 HOT 3
- mongoose 4.1 won't start on mac os x 10.9.1 with 'listening_ports 80' HOT 1
- Follow symbolic links
- I cannot get mongoose to process a GET from the client when requesting a JSON file. HOT 3
- Still not smart about urls containing cgi script and more elements after script in the url HOT 1
- compiling mogoose with lua HOT 5
- lua cgi with mongoose 4.1 HOT 1
- gpa pha HOT 1
- 301 Redirection HOT 1
- "Failed to start Mongoose" HOT 1
- mingw4.9 printf format for int64 should be also %I64d, not %lld HOT 1
- cookie_authentication example no server response HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mongoose.