Simple Directmedia Layer
Go to file
Sam Lantinga f8400cbba9 Fixed bug 4692 - Command line parsing
Galadrim

As I have seen, SDL implements its own command line parser for Windows in SDL_windows_main.c. Unfortunately, it doesn't seem to allow command line arguments with trailing backslashes if quoting is required.

Usually, when you write an application that gets command line arguments passed as argc and argv, the parsing is done by parse_cmdline. The Windows API also provides the function CommandLineToArgvW, so an application can parse itself if only the command line string is provided. Both functions behave almost identically according to their documentation. If the argument "\\" (including the quotes) is passed, they both turn it into a single backslash.

The SDL command line parser on the other hand doesn't recognize the second quote character as the closing character in this example and therefore includes it in the parsed argument. The parser does not count the number of backslashes preceding a quote. It always treats a quote as escaped if a backslash is in front of it. Therefore, it should be impossible to quote and escape an argument correctly, if it has a trailing backslash and contains characters that require quoting.

Of course, each application is allowed to implement its own parsing rules, so SDL is free to do so. But the problem I see is that there are arguments, that are impossible to be passed to the parser correctly, as I described above. Is there a reason, why SDL does not simply use CommandLineToArgvW instead of implementing its own parser?

Here are some links that show that correct argument parsing, as it is usually done in Windows, is quite complicated:

https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

http://www.windowsinspired.com/how-a-windows-programs-splits-its-command-line-into-individual-arguments/
2019-07-31 09:11:20 -07:00
acinclude Added missing PKG_CONFIG macros 2019-03-16 17:39:15 -07:00
android-project Fixed bug 4702 - Android back button does not send SDL_KEYDOWN event 2019-07-03 13:37:54 +02:00
android-project-ant Added the old ant Android build project structure 2017-10-28 12:11:25 -07:00
build-scripts Updated version to 2.0.10 2019-06-17 10:13:28 -07:00
cmake cmake: Added HIDAPI support. 2019-07-08 16:46:52 -04:00
debian Updated version to 2.0.10 2019-06-17 10:13:28 -07:00
docs Add notes for SDL_WinRTRunApp and SDL2-WinRTResources for non-C++ projects 2019-06-09 11:54:51 -04:00
include Fix bug 4746 - introduce SDL_zeroa macro. 2019-07-31 01:22:02 +03:00
src Fixed bug 4692 - Command line parsing 2019-07-31 09:11:20 -07:00
test use SDL_zeroa at more places where the argument is an array. 2019-07-31 05:11:40 +03:00
VisualC Rolling back GameCube HIDAPI support 2019-06-19 15:54:21 -07:00
VisualC-WinRT Added display event files to the Visual Studio projects 2018-08-23 02:48:47 -07:00
visualtest test: unify all the command line usage logging. 2019-05-28 17:39:13 -04:00
wayland-protocols wayland: ask xdg-decoration protocol extension to use server-side decorations if possible. 2018-11-04 21:08:40 +01:00
Xcode Fixed bug 4742 - SDL 2.0.10 DMG has duplicated files (instead of symlinks) 2019-07-30 10:15:49 -07:00
Xcode-iOS fix permissions 2019-07-09 08:55:00 +03:00
.hgignore First pass on the new SDL sensor API 2018-08-21 12:11:34 -07:00
Android.mk fix permissions 2019-06-12 13:56:20 +03:00
autogen.sh Don't use pushd/popd in autogen.sh; Ubuntu's /bin/sh doesn't support it. 2016-12-26 22:58:58 -05:00
BUGS.txt BUGS.txt: Changed mailing list link to discourse.libsdl.org. 2017-04-01 00:05:25 -04:00
cmake_uninstall.cmake.in Fixed bug 3867 - Can't find install_manifest.txt when running 'uninstall' target 2017-10-12 08:44:45 -07:00
CMakeLists.txt cmake: Add setupapi library to Windows build dependencies (hidapi needs it). 2019-07-12 13:40:58 -04:00
configure configure: Windows and macOS now respect --enable-hidapi. 2019-07-08 16:08:16 -04:00
configure.ac configure: Windows and macOS now respect --enable-hidapi. 2019-07-08 16:08:16 -04:00
COPYING.txt Updated copyright for 2019 2019-01-04 22:01:14 -08:00
CREDITS.txt Fixed crash if initialization of EGL failed but was tried again later. 2015-06-21 17:33:46 +02:00
INSTALL.txt More HTTPS doc tweaks. 2017-02-16 16:59:07 -05:00
Makefile.in Add a configure option allowing users to choose whether to install sdl2-config 2019-04-07 23:01:07 +10:00
Makefile.minimal Added a dummy sensor driver 2018-08-21 13:29:21 -07:00
Makefile.os2 update version in os/2 makefile 2019-06-24 23:51:10 +03:00
Makefile.pandora Added a dummy sensor driver 2018-08-21 13:29:21 -07:00
Makefile.psp Added a dummy sensor driver 2018-08-21 13:29:21 -07:00
Makefile.wiz Added a dummy sensor driver 2018-08-21 13:29:21 -07:00
README-SDL.txt More HTTPS changes in the documentation. 2017-02-16 16:52:03 -05:00
README.txt readme: correct webpage URL to use HTTPS. 2017-02-16 13:30:34 -05:00
sdl2-config.cmake.in Applied Ubuntu patch bug_822210_fix_sdl2-config.cmake_whitespace.patch 2016-10-07 15:08:37 -07:00
sdl2-config.in Fixed crash if initialization of EGL failed but was tried again later. 2015-06-21 17:33:46 +02:00
sdl2.m4 Fixed bug 4544 - SDL2.m4 SDL2.framework patch made it impossible to fail detection 2019-03-16 18:45:10 -07:00
sdl2.pc.in Fixed crash if initialization of EGL failed but was tried again later. 2015-06-21 17:33:46 +02:00
SDL2.spec.in Fixed bug 4615 - RPM Build fails due to unpackaged files 2019-06-11 19:58:10 -07:00
SDL2Config.cmake Fixed bug 3651 - CMake build does not install CMake package configuration 2017-08-09 19:03:10 -07:00
TODO.txt Fixed crash if initialization of EGL failed but was tried again later. 2015-06-21 17:33:46 +02:00
VisualC.html Fixed two typos in documentation. 2016-01-12 22:23:53 +01:00
WhatsNew.txt Made it more explicit that 2.0.10 and newer are required for the SDL_RW* functions 2019-07-01 09:05:15 -07:00

                         Simple DirectMedia Layer

                                  (SDL)

                                Version 2.0

---
https://www.libsdl.org/

Simple DirectMedia Layer is a cross-platform development library designed
to provide low level access to audio, keyboard, mouse, joystick, and graphics
hardware via OpenGL and Direct3D. It is used by video playback software,
emulators, and popular games including Valve's award winning catalog
and many Humble Bundle games.

More extensive documentation is available in the docs directory, starting
with README.md

Enjoy!
	Sam Lantinga				(slouken@libsdl.org)