Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 5148 in orxonox.OLD for trunk/src


Ignore:
Timestamp:
Aug 27, 2005, 12:17:50 PM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: one Parameter safe now

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lib/util/helper_functions.cc

    r5141 r5148  
    4343  int result = strtol(INT, &endPtr, 10);
    4444
    45   if ( endPtr >= INT && endPtr < INT + strlen(INT))
     45  if ( endPtr >= INT && endPtr < INT + strnlen(INT, 10))
    4646    return defaultValue;
    4747  else
  • trunk/src/util/shell.cc

    r5145 r5148  
    7979
    8080  ShellCommand<Shell>::registerCommand("clear", CL_SHELL, &Shell::clear);
     81  ShellCommand<Shell>::registerCommand("testS", CL_SHELL, &Shell::testS);
    8182  ShellCommand<Shell>::registerCommand("testI", CL_SHELL, &Shell::testI);
    82   ShellCommand<Shell>::registerCommand("testS", CL_SHELL, &Shell::testS);
    8383}
    8484
     
    9292{
    9393  printf("This is the Test for one String '%s'\n", s);
    94 
    9594}
    9695
  • trunk/src/util/shell_command.cc

    r5147 r5148  
    3333  this->setName(commandName);
    3434
    35   va_list parameters;
    36   va_start(parameters, paramCount);
    37 
    3835  this->classID = classID;
    3936  this->className = ClassList::IDToString(classID);
     
    4845    paramCount = FUNCTOR_MAX_ARGUMENTS;
    4946  this->paramCount = paramCount;
    50   this->parameters = new long[paramCount];
     47  this->parameters = new unsigned int[paramCount];
     48
     49  va_list parameterList;
     50  va_start(parameterList, paramCount);
    5151
    5252  for (unsigned int i = 0; i < paramCount; i++)
    5353  {
    54     this->parameters[i] = va_arg(parameters, long);
     54    this->parameters[i] = va_arg(parameterList, int);
    5555
    5656    switch (this->parameters[i])
    5757    {
    5858      case ParameterBool:
    59         this->defaultBools[i] = va_arg(parameters, int);
     59        this->defaultBools[i] = va_arg(parameterList, int);
    6060        break;
    6161      case ParameterChar:
    6262        this->defaultStrings[i] = new char[2];
    63         sprintf(this->defaultStrings[0], "%c",  va_arg(parameters, int));
     63        sprintf(this->defaultStrings[0], "%c",  va_arg(parameterList, int));
    6464        break;
    6565      case ParameterString:
    66         this->defaultStrings[i] = va_arg(parameters, char*);
     66        this->defaultStrings[i] = va_arg(parameterList, char*);
    6767        break;
    6868      case ParameterInt:
    69         this->defaultInts[i] = va_arg(parameters, int);
     69        this->defaultInts[i] = va_arg(parameterList, int);
    7070        break;
    7171      case ParameterUInt:
    72         this->defaultInts[i] = va_arg(parameters, unsigned int);
     72        this->defaultInts[i] = va_arg(parameterList, unsigned int);
    7373        break;
    7474      case ParameterFloat:
    75         this->defaultFloats[i] = va_arg(parameters, double);
     75        this->defaultFloats[i] = va_arg(parameterList, double);
    7676        break;
    7777      case ParameterLong:
    78         this->defaultInts[i] = va_arg(parameters, long);
     78        this->defaultInts[i] = va_arg(parameterList, long);
    7979        break;
    8080      default:
     
    9797bool ShellCommandBase::isRegistered(const char* commandName, ClassID classID, unsigned int paramCount, ...)
    9898{
    99   va_list parameters;
    100   va_start(parameters, paramCount);
     99  va_list parameterList;
     100  va_start(parameterList, paramCount);
    101101
    102102  if (ShellCommandBase::commandList == NULL)
    103103  {
    104104    ShellCommandBase::commandList = new tList<ShellCommandBase>;
     105    ShellCommand<ShellCommandBase>::registerCommand("debug", CL_SHELL_COMMAND, &ShellCommandBase::debug);
    105106    return false;
    106107  }
     
    126127 * executes commands
    127128 * @param executionString the string containing the following input
    128  * <ClassName> [<ObjectName>] <functionName> [parameter1[,parameter2[,...]]]
     129 * ClassName [ObjectName] functionName [parameter1[,parameter2[,...]]]
    129130 * @return true on success, false otherwise.
    130131 */
     
    156157          continue;
    157158        }
     159        PRINTF(4)("Command %s matches\n", elem->getName());
    158160        // getting singleton-reference
    159161        tList<BaseObject>* list =  ClassList::getList(elem->classID);
    160         if (list)
     162        if (list != NULL)
    161163          objectPointer = list->firstElement();
    162164      }
     
    195197          continue;
    196198        }
    197         PRINTF(5)("Function '%s' found\n", commandBegin);
     199        PRINTF(4)("Function '%s' found\n", commandBegin);
    198200      }
    199201      const char* paramBegin = strchr(commandBegin, ' ');
     
    203205        paramBegin++;
    204206
     207      PRINTF(3)("Parameters to Pass: %s\n", paramBegin);
    205208      if (objectPointer != NULL && paramBegin != NULL)
    206209      {
     
    215218  return true;
    216219}
     220
     221
     222void ShellCommandBase::debug()
     223{
     224  if (ShellCommandBase::commandList == NULL)
     225  {
     226    PRINT(0)("No Command registered so far\n");
     227    return;
     228  }
     229
     230  tIterator<ShellCommandBase>* iterator = ShellCommandBase::commandList->getIterator();
     231  ShellCommandBase* elem = iterator->firstElement();
     232  while(elem != NULL)
     233  {
     234    PRINT(0)("Class %s registered command %s with %d parameters: ", elem->className, elem->getName(), elem->paramCount);
     235    for (unsigned int i = 0; i< elem->paramCount; i++)
     236      printf(ShellCommandBase::paramToString(elem->parameters[i]));
     237    printf("\n");
     238
     239    elem = iterator->nextElement();
     240  }
     241  delete iterator;
     242}
     243
     244
     245
     246const char* ShellCommandBase::paramToString(long parameter)
     247{
     248  switch (parameter)
     249  {
     250    case ParameterBool:
     251      return "BOOL";
     252      break;
     253    case ParameterChar:
     254      return "CHAR";
     255      break;
     256    case ParameterString:
     257      return "STRING";
     258      break;
     259    case ParameterInt:
     260      return "INT";
     261      break;
     262    case ParameterUInt:
     263      return "UINT";
     264      break;
     265    case ParameterFloat:
     266      return "FLOAT";
     267      break;
     268    case ParameterLong:
     269      return "LONG";
     270      break;
     271    default:
     272      return "NULL";
     273      break;
     274  }
     275}
  • trunk/src/util/shell_command.h

    r5147 r5148  
    4545  }
    4646
    47 
     47// CONSTRUCTORS
    4848#define ShellCommandConstructor0 \
    4949  void (T::*functionPointer_0)(); \
     
    7070#define ShellCommandExecute1(t1) \
    7171   else if (this->paramCount == 1 && this->parameters[0] == t1##_PARAM) \
    72        (dynamic_cast<T*>(object)->*functionPointer_1_##t1)(t1##_FUNC(parameters, 0))
     72    (dynamic_cast<T*>(object)->*functionPointer_1_##t1)(t1##_FUNC(parameters, 0))
    7373
    7474
     
    9090
    9191    static bool isRegistered(const char* commandName, ClassID classID, unsigned int paramCount, ...);
     92    static const char* paramToString(long parameter);
    9293
     94    void debug();
    9395  private:
    9496    virtual void executeCommand (BaseObject* object, const char* parameters) = NULL;
     
    9799    void*                            functionPointer;     //!< The pointeer to the function of the Class (or static pointer if ClassID == CL_NULL )
    98100    unsigned int                     paramCount;          //!< the count of parameters
    99     long*                            parameters;          //!< Parameters
     101    unsigned int*                    parameters;          //!< Parameters
    100102    bool                             isSingleton;         //!< if the Class is Singleton @todo autocheck
    101103
     
    143145#define FUNCTOR_LIST(x) ShellCommandRegister ## x
    144146//#include "functor_list.h"
    145 FUNCTOR_LIST(0);
    146 FUNCTOR_LIST(1)(l_INT);
    147 FUNCTOR_LIST(1)(l_STRING);
     147  FUNCTOR_LIST(0);
     148  FUNCTOR_LIST(1)(l_INT);
     149  FUNCTOR_LIST(1)(l_STRING);
    148150#undef FUNCTOR_LIST
    149151
     
    160162    {
    161163      if (parameters != NULL)
    162         SubString params(parameters, ',');
     164        //SubString params(parameters, ',');
    163165#define FUNCTOR_LIST(x) ShellCommandExecute ## x
    164166//#include "functor_list.h"
    165167  FUNCTOR_LIST(0);
    166168  FUNCTOR_LIST(1)(l_INT);
    167   FUNCTOR_LIST(1)(l_STRING);
     169  //FUNCTOR_LIST(1)(l_STRING);
    168170#undef FUNCTOR_LIST
    169171    }
Note: See TracChangeset for help on using the changeset viewer.