Browse Source

Fix JackArgParser (when used with empty strings)

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2669 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
moret 17 years ago
parent
commit
c852bd397c
5 changed files with 28 additions and 12 deletions
  1. +1
    -1
      common/JackInternalClient.cpp
  2. +8
    -7
      common/JackNetManager.cpp
  3. +2
    -1
      common/JackNetTool.h
  4. +14
    -2
      common/JackTools.cpp
  5. +3
    -1
      common/JackTools.h

+ 1
- 1
common/JackInternalClient.cpp View File

@@ -200,7 +200,7 @@ JackLoadableInternalClient::JackLoadableInternalClient(JackServer* server, JackS
jack_error("symbol jack_finish cannot be found in %s", so_name); jack_error("symbol jack_finish cannot be found in %s", so_name);
throw - 1; throw - 1;
} }
fDescriptor = (JackDriverDescFunction)GetJackProc(fHandle, "jack_get_descriptor"); fDescriptor = (JackDriverDescFunction)GetJackProc(fHandle, "jack_get_descriptor");
if (!fDescriptor) { if (!fDescriptor) {
jack_info("No jack_get_descriptor entry-point for %s", so_name); jack_info("No jack_get_descriptor entry-point for %s", so_name);


+ 8
- 7
common/JackNetManager.cpp View File

@@ -322,7 +322,7 @@ namespace Jack


int JackNetMaster::SetProcess ( jack_nframes_t nframes, void* arg ) int JackNetMaster::SetProcess ( jack_nframes_t nframes, void* arg )
{ {
JackNetMaster* master = static_cast<JackNetMaster*> ( arg );
JackNetMaster* master = static_cast<JackNetMaster*> ( arg );
return master->Process(); return master->Process();
} }


@@ -629,12 +629,12 @@ extern "C"
{ {
jack_driver_desc_t *desc; jack_driver_desc_t *desc;
desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t)); desc = (jack_driver_desc_t*)calloc(1, sizeof(jack_driver_desc_t));
// TODO // TODO
return desc; return desc;
} }
EXPORT int jack_internal_initialize ( jack_client_t* jack_client, const JSList* params ) EXPORT int jack_internal_initialize ( jack_client_t* jack_client, const JSList* params )
{ {
if ( master_manager ) if ( master_manager )
@@ -649,11 +649,12 @@ extern "C"
return ( master_manager ) ? 0 : 1; return ( master_manager ) ? 0 : 1;
} }
} }
EXPORT int jack_initialize ( jack_client_t* jack_client, const char* load_init ) EXPORT int jack_initialize ( jack_client_t* jack_client, const char* load_init )
{ {
const JSList* params = NULL;
// TODO : convert load_init to params
const JSList* params = NULL;
Jack::JackArgParser args(load_init);
const char** argv = args.GetArgv();
return jack_internal_initialize(jack_client, params); return jack_internal_initialize(jack_client, params);
} }




+ 2
- 1
common/JackNetTool.h View File

@@ -21,7 +21,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "JackConstants.h" #include "JackConstants.h"
#include "JackMidiPort.h" #include "JackMidiPort.h"
#include "JackExports.h" #include "JackExports.h"
#include "JackError.h"
#include "JackError.h"
#include "JackTools.h"
#include "JackPlatformNetSocket.h" #include "JackPlatformNetSocket.h"


#include <string> #include <string>


+ 14
- 2
common/JackTools.cpp View File

@@ -205,9 +205,17 @@ namespace Jack {
} }


JackArgParser::JackArgParser(const char* arg) { JackArgParser::JackArgParser(const char* arg) {
jack_log ( "JackArgParser::JackArgParser, arg : '%s'", arg );

fArgc=0; fArgc=0;
fNumArgv=0; fNumArgv=0;
fArgString=string(arg); fArgString=string(arg);
//if empty string
if (strlen(arg)==0) {
fArgv = NULL;
return;
}
//else parse the arg string
fArgString+=" "; fArgString+=" ";
const size_t arg_len=fArgString.length(); const size_t arg_len=fArgString.length();
int i=0; int i=0;
@@ -226,7 +234,7 @@ namespace Jack {
//no more quotes or spaces, consider the end of the string //no more quotes or spaces, consider the end of the string
if (pos==string::npos) if (pos==string::npos)
pos=arg_len; pos=arg_len;
//if it's a double quote
//if double quote
if (fArgString.at(pos)=='\"') { if (fArgString.at(pos)=='\"') {
//first character : copy the substring //first character : copy the substring
if (pos==start) { if (pos==start) {
@@ -242,7 +250,7 @@ namespace Jack {
start=pos; start=pos;
} }
} }
//if it's a space
//if space
if (fArgString.at(pos)==' ') { if (fArgString.at(pos)==' ') {
copy_start=start; copy_start=start;
copy_length=pos-copy_start; copy_length=pos-copy_start;
@@ -260,12 +268,16 @@ namespace Jack {
fill_n(fArgv[i],args[i].length()+1,0); fill_n(fArgv[i],args[i].length()+1,0);
args[i].copy(fArgv[i],args[i].length()); args[i].copy(fArgv[i],args[i].length());
} }

//finally count the 'real' options (the ones starting with a '-')
for (i=0; i<fNumArgv; i++) for (i=0; i<fNumArgv; i++)
if (fArgv[i][0]=='-') if (fArgv[i][0]=='-')
fArgc++; fArgc++;
} }


JackArgParser::~JackArgParser() { JackArgParser::~JackArgParser() {
for (int i=0; i<fNumArgv; i++)
delete[] fArgv[i];
delete[] fArgv; delete[] fArgv;
} }




+ 3
- 1
common/JackTools.h View File

@@ -20,6 +20,8 @@
#ifndef __JackTools__ #ifndef __JackTools__
#define __JackTools__ #define __JackTools__


#include "JackExports.h"

#ifdef WIN32 #ifdef WIN32
#include <windows.h> #include <windows.h>
#else #else
@@ -54,7 +56,7 @@ struct JackTools


}; };


class JackArgParser
class EXPORT JackArgParser
{ {
private: private:
std::string fArgString; std::string fArgString;


Loading…
Cancel
Save