ACSErr::Completion *ErrorComponent::completionOnStack(CORBA::Short depth) { ACS_TRACE("::ErrorComponent::completionOnStack"); // here we get LOCAL (C++) completion CompletionImpl *comp = createCompletion(depth); // if comp does not contain error (=is error free) we return it // otherwise we create a new completion which takes the error trace from a completion comp. if (comp->isErrorFree()) { // memory for comp is released in the call return comp->returnCompletion(); } else { // The constructor takes care for the memory manamgent // for the passed completion or exception. // If a completion or an exception is passed as pointer the constructor assumes that // completion was created on the heap and thus it deletes it afterwards, // so it MUST NOT be deleted by the user ! // If a completion or an exception is passed as an object (or reference to it) // the constructor assumes that the it was created on the stack // and thus it does not delete it. // // NOTE: do not pass a pointer of a completion or an exception // which was created on the stack !! In this case just send the completion object. ACSErrTypeCommon::GenericErrorCompletion erg(comp, __FILE__, __LINE__, "ErrorComponent::completionOnStack"); erg.setErrorDesc("Put an error trace in completionOnStack"); return erg.returnCompletion(false); // With false flag we tell returnCompletion() // not to delete its object // since it is automatically deleted when we go out of scope }//if }//completionOnStack
int set_new_value(KscServerBase* Server, Dienst_param* Params, PltString& out) /*****************************************************************************/ { KsSetVarParams setpar(1); KsSetVarResult erg(1); KscAvSimpleModule *AV = GetClientAV(); SetInstVarItems *pset; PltString log; int error; int fehler = 0; size_t siz; // Merker : Anzahl zu setzenden Variablen size_t i; // Lauf-Variable KsString VarName; // Merker : NAme der zu setzender Variable //char help[256]; int isVendor = 0; if( !Params->Set_Inst_Var) { return 0; } if( !Params->Set_Inst_Var->Inst_var) { return 0; } pset = Params->Set_Inst_Var; // Sonderfall: "Vendor" VarName = pset->Inst_name; if(VarName == "/vendor") { isVendor = 1; } while(pset) { error = GetCreateObjectVar( pset->Inst_var, setpar.items); if(!error) { siz = setpar.items.size(); for(i = 0; i < siz; i++) { VarName = setpar.items[i].path_and_name; setpar.items[i].path_and_name = pset->Inst_name; if(isVendor) { // Trenner ist '/'. Der Variable wurde '.' hinzugefuegt setpar.items[i].path_and_name += "/"; setpar.items[i].path_and_name += VarName.substr(1); } else { // Part-Variable. Trenner '.' bereits in Name setpar.items[i].path_and_name += VarName; } } bool ok = Server->requestByOpcode ( KS_SETVAR, AV, setpar, erg); if(!ok) { error = Server->getLastResult(); if(error == KS_ERR_OK) error = KS_ERR_GENERIC; } else if(erg.result) { error = erg.result; } else { siz = erg.results.size(); for(i = 0; i < siz; i++) { if( erg.results[i].result) { error = erg.results[i].result; break; } } } } if(error) { // Letzte Fehler-Kode merken fehler = error; out += log_getErrMsg(error, "Instance",pset->Inst_name,"couldn't be updated."); log = "\"%s\" \""; log += pset->Inst_name; log += "\""; iFBS_SetLastError(1, error, log); } else { out += log_getOkMsg("Instance",pset->Inst_name,"updated"); } pset = pset->next; } /* while pset */ return fehler; } /* set_new_value() */