diff options
author | Robin Gareus <robin@gareus.org> | 2015-01-13 22:40:14 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-01-13 22:41:00 +0100 |
commit | 886a64e02a0f7ce192c318f74cff1f16d5e15bfb (patch) | |
tree | 750d0ee55d85d676139de81f85b432bc5888b964 /posix | |
parent | 81c129c1dd9555a9b982e8980683cd49c29988b8 (diff) | |
download | jack2-886a64e02a0f7ce192c318f74cff1f16d5e15bfb.tar.gz |
support [unescaped] double-quotes in jackdrc
allow autostart of jackd on OSX where device-names can
contain spaces.
Diffstat (limited to 'posix')
-rw-r--r-- | posix/JackPosixServerLaunch.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/posix/JackPosixServerLaunch.cpp b/posix/JackPosixServerLaunch.cpp index e4d3985c..f1e94c1f 100644 --- a/posix/JackPosixServerLaunch.cpp +++ b/posix/JackPosixServerLaunch.cpp @@ -148,16 +148,36 @@ static void start_server_classic_aux(const char* server_name) } } - result = strcspn(arguments + pos, " "); - if (result == 0) { + /* skip whitespace */ + while (pos < strlen(arguments) && arguments[pos] && arguments[pos] == ' ') { + ++pos; + } + + if (pos >= strlen(arguments)) { + break; + } + + if (arguments[pos] == '\"') { + ++pos; + result = strcspn(arguments + pos, "\""); + } else { + result = strcspn(arguments + pos, " "); + } + + if (0 == result) { break; } + argv[i] = (char*)malloc(result + 1); strncpy(argv[i], arguments + pos, result); argv[i][result] = '\0'; pos += result + 1; - ++i; + + if (++i > 253) { + break; + } } + argv[i] = 0; execv(command, argv); |