/* * function tp_handle_request(): handle a single given request. * algorithm: prints a message stating that the given thread handled * the given request. * input: request pointer * output: none */ extern void * tp_handle_request(void *request) { DM_DBG_I; tp_request *p_request = (tp_request *)request; if (p_request) { sleep(*((int *)p_request->data)); DM_DBG(DM_N(3), "thread (%d): handled request '%d'\n", p_request->tp_tid, *((int *)p_request->data)); } RETURN(NULL); }
/** * srmLs method. * * \param soap * \param srm_endpoint * \param userID * \param path * \param fileStorageType * \param fullDetailedList * \param allLevelRecursive * \param numOfLevels * \param offset * \param count * \param resp request response * * \returns request exit status (EXIT_SUCCESS/EXIT_FAILURE) */ extern int Ls(struct soap *soap, const char *srm_endpoint, const char *userID, const tSurlInfoArray path, const long int *fileStorageType, bool *fullDetailedList, /* yes, no const in gsoap headers */ bool *allLevelRecursive, /* yes, no const in gsoap headers */ int *numOfLevels, /* yes, no const in gsoap headers */ int *offset, /* yes, no const in gsoap headers */ int *count, /* yes, no const in gsoap headers */ struct srm__srmLsResponse_ *resp) { DM_DBG_I; struct srm__srmLsRequest req; DO_SOAP_INIT(soap); #ifdef HAVE_CGSI_PLUGIN int flags; flags = CGSI_OPT_DISABLE_NAME_CHECK|CGSI_OPT_DELEG_FLAG; soap_register_plugin_arg (soap, client_cgsi_plugin, &flags); #else #warning "Compiling without CGSI plugin support, i.e. no security" #endif NEW_STR_VAL(userID,TUserID); NOT_NULL(req.paths = soap_new_srm__ArrayOfTSURLInfo(soap, -1)); ARRAY_OF_TSURL_INFO(paths); req.fileStorageType = (srm__TFileStorageType *)fileStorageType; DM_LOG(DM_N(2), "fileStorageType == `%s'\n", getTFileStorageType(*req.fileStorageType).c_str()); PBOOL_VAL(fullDetailedList); PBOOL_VAL(allLevelRecursive); PINT_VAL(numOfLevels); PINT_VAL(offset); PINT_VAL(count); /* To send the request ... */ SOAP_CALL_SRM(Ls); RETURN(EXIT_SUCCESS); }
DM_N DIV_NN_N (DM_N X1, DM_N X2) { DM_N xCopy; //Объявляем временную переменную, которая будет //хранить копию делимого DM_N t=DM_N(); //Объявляем переменную счётчик, обнуляем. if (!NZER_N_B(X2)) //Если делитель равен нулю, выдает ошибку printf("Делитель равен нулю."); else if (COM_NN_D(X1, X2)==2) //Если Первое число больше второго: { xCopy=X1; //Во временную переменную записываем значение большего числа do { xCopy=SUB_NN_N(xCopy, X2); //Вычитаем из большего числа меньшее t=ADD_1N_N(t); //Наращиваем t } while (COM_NN_D(xCopy, X2)==2 || COM_NN_D(xCopy, X2)==0); //Цикл пока делимое больше или равно делителя return t; //Возвращаем t } else if (COM_NN_D(X1, X2)==1) //Если второе число больше первого: (Делаем те же операции) { xCopy = X2; do { xCopy=SUB_NN_N(xCopy,X1); t=ADD_1N_N(t); } while (COM_NN_D(xCopy, X1)==2); return t; } else if (COM_N_D(X1, X2)==0) //Если числа равны { t=ADD_1N_N(t); //Наращиваем один раз t, чтобы t равнялось 1 return t; //Возвращаем t; } }
/** * srmPrepareToGet method. * * \param soap * \param srm_endpoint * \param userID * \param arrayOfFileRequests * \param arrayOfTransferProtocols * \param userRequestDescription * \param storageSystemInfo * \param totalRetryTime * \param resp request response * * \returns request exit status (EXIT_SUCCESS/EXIT_FAILURE) */ extern int PrepareToGet(struct soap *soap, const char *srm_endpoint, const char *userID, const tArrayOfGetFileRequests arrayOfFileRequests, std::vector <std::string *> arrayOfTransferProtocols, const char *userRequestDescription, const char *storageSystemInfo, const int64_t *totalRetryTime, struct srm__srmPrepareToGetResponse_ *resp) { DM_DBG_I; struct srm__srmPrepareToGetRequest req; DO_SOAP_INIT(soap); #ifdef HAVE_CGSI_PLUGIN int flags; flags = CGSI_OPT_DISABLE_NAME_CHECK|CGSI_OPT_DELEG_FLAG; soap_register_plugin_arg (soap, client_cgsi_plugin, &flags); #else #warning "Compiling without CGSI plugin support, i.e. no security" #endif NEW_STR_VAL(userID,TUserID); NOT_NULL(req.arrayOfFileRequests = soap_new_srm__ArrayOfTGetFileRequest(soap, -1)); /* Create the file request */ DM_LOG(DM_N(2), "arrayOfFileRequests.SURLOrStFN.size() == %d\n", arrayOfFileRequests.SURLOrStFN.size()); for (uint u = 0; u < arrayOfFileRequests.SURLOrStFN.size(); u++) { srm__TGetFileRequest *fileRequest; NOT_NULL(fileRequest = soap_new_srm__TGetFileRequest(soap, -1)); NOT_NULL(fileRequest->dirOption = soap_new_srm__TDirOption(soap, -1)); if(NOT_NULL_VEC(arrayOfFileRequests,allLevelRecursive)) { fileRequest->dirOption->allLevelRecursive = (bool *)arrayOfFileRequests.allLevelRecursive[u]; DM_LOG(DM_N(2), "allLevelRecursive[%u] == %d\n", u, *(fileRequest->dirOption->allLevelRecursive)); } else { fileRequest->dirOption->allLevelRecursive = NULL; DM_LOG(DM_N(2), "allLevelRecursive[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,isSourceADirectory)) { fileRequest->dirOption->isSourceADirectory = arrayOfFileRequests.isSourceADirectory[u]; DM_LOG(DM_N(2), "isSourceADirectory[%u] == %d\n", u, fileRequest->dirOption->isSourceADirectory); } else { fileRequest->dirOption->isSourceADirectory = 0; DM_LOG(DM_N(2), "isSourceADirectory[%u] == 0\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,numOfLevels)) { fileRequest->dirOption->numOfLevels = arrayOfFileRequests.numOfLevels[u]; DM_LOG(DM_N(2), "numOfLevels[%u] == %d\n", u, fileRequest->dirOption->numOfLevels); } else { fileRequest->dirOption->numOfLevels = 0; DM_LOG(DM_N(2), "numOfLevels[%u] == 0\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,fileStorageType)) { fileRequest->fileStorageType = (srm__TFileStorageType *)getTFileStorageType(arrayOfFileRequests.fileStorageType[u]->c_str()); DM_LOG(DM_N(2), "fileStorageType[%u] == `%s'\n", u, getTFileStorageType(*fileRequest->fileStorageType).c_str()); } else { fileRequest->fileStorageType = NULL; DM_LOG(DM_N(2), "fileStorageType[%u] == NULL\n", u); } NOT_NULL(fileRequest->fromSURLInfo = soap_new_srm__TSURLInfo(soap, -1)); if(NOT_NULL_VEC(arrayOfFileRequests,SURLOrStFN)) { NOT_NULL(fileRequest->fromSURLInfo->SURLOrStFN = soap_new_srm__TSURL(soap, -1)); fileRequest->fromSURLInfo->SURLOrStFN->value.assign(arrayOfFileRequests.SURLOrStFN[u]->c_str()); DM_LOG(DM_N(2), "SURLOrStFN[%u] == `%s'\n", u, fileRequest->fromSURLInfo->SURLOrStFN->value.c_str()); } else { fileRequest->fromSURLInfo->SURLOrStFN = NULL; DM_LOG(DM_N(2), "SURLOrStFN[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,storageSystemInfo)) { NOT_NULL(fileRequest->fromSURLInfo->storageSystemInfo = soap_new_srm__TStorageSystemInfo(soap, -1)); fileRequest->fromSURLInfo->storageSystemInfo->value.assign(arrayOfFileRequests.storageSystemInfo[u]->c_str()); DM_LOG(DM_N(2), "storageSystemInfo[%u] == `%s'\n", u, fileRequest->fromSURLInfo->storageSystemInfo->value.c_str()); } else { fileRequest->fromSURLInfo->storageSystemInfo = NULL; DM_LOG(DM_N(2), "storageSystemInfo[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,lifetime)) { NOT_NULL(fileRequest->lifetime = soap_new_srm__TLifeTimeInSeconds(soap, -1)); fileRequest->lifetime->value = *arrayOfFileRequests.lifetime[u]; DM_LOG(DM_N(2), "lifetime[%u] == %"PRIi64"\n", u, fileRequest->lifetime->value); } else { fileRequest->lifetime = NULL; DM_LOG(DM_N(2), "lifetime[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,spaceToken)) { NOT_NULL(fileRequest->spaceToken = soap_new_srm__TSpaceToken(soap, -1)); fileRequest->spaceToken->value.assign(arrayOfFileRequests.spaceToken[u]->c_str()); DM_LOG(DM_N(2), "spaceToken[%u] == `%s'\n", u, fileRequest->spaceToken->value.c_str()); } else { fileRequest->spaceToken = NULL; DM_LOG(DM_N(2), "spaceToken[%u] == NULL\n", u); } req.arrayOfFileRequests->getRequestArray.push_back(fileRequest); } req.arrayOfTransferProtocols = soap_new_srm__ArrayOf_USCORExsd_USCOREstring(soap, -1); /* Fill in transfer protocols */ DM_LOG(DM_N(2), "arrayOfTransferProtocols.size() == %d\n", arrayOfTransferProtocols.size()); for(uint u = 0; u < arrayOfTransferProtocols.size(); u++) { if(arrayOfTransferProtocols[u]) { req.arrayOfTransferProtocols->stringArray.push_back(arrayOfTransferProtocols[u]->c_str()); DM_LOG(DM_N(2), "arrayOfTransferProtocols[%i] == `%s'\n", u, arrayOfTransferProtocols[u]->c_str()); } else { DM_LOG(DM_N(2), "arrayOfTransferProtocols[%i] == NULL\n", u); } } NEW_STDSTRING(userRequestDescription); NEW_STR_VAL(storageSystemInfo,TStorageSystemInfo); NEW_INT64_VAL(totalRetryTime,TLifeTimeInSeconds); /* To send the request ... */ SOAP_CALL_SRM(PrepareToGet); RETURN(EXIT_SUCCESS); }
/** * srmCopy method. * * \param srm_endpoint * \param userID * \param arrayOfFileRequests * \param userRequestDescription * \param overwriteOption * \param removeSourceFiles * \param storageSystemInfo * \param totalRetryTime * \param resp request response * * \returns request exit status (EXIT_SUCCESS/EXIT_FAILURE) */ extern int Copy(struct soap *soap, const char *srm_endpoint, const char *userID, const tArrayOfCopyFileRequests arrayOfFileRequests, const char *userRequestDescription, const long int *overwriteOption, bool *removeSourceFiles, /* yes, no const in gsoap headers */ const char *storageSystemInfo, const int64_t *totalRetryTime, struct srm__srmCopyResponse_ *resp ) { DM_DBG_I; struct srm__srmCopyRequest req; DO_SOAP_INIT(soap); #ifdef HAVE_CGSI_PLUGIN int flags; flags = CGSI_OPT_DISABLE_NAME_CHECK|CGSI_OPT_DELEG_FLAG; soap_register_plugin_arg (soap, client_cgsi_plugin, &flags); #else #warning "Compiling without CGSI plugin support, i.e. no security" #endif NEW_STR_VAL(userID,TUserID); NOT_NULL(req.arrayOfFileRequests = soap_new_srm__ArrayOfTCopyFileRequest(soap, -1)); /* Create the file request */ DM_LOG(DM_N(2), "arrayOfFileRequests.fromSURLOrStFN.size() == %d\n", arrayOfFileRequests.fromSURLOrStFN.size()); for (uint u = 0; u < arrayOfFileRequests.fromSURLOrStFN.size(); u++) { srm__TCopyFileRequest *fileRequest; NOT_NULL(fileRequest = soap_new_srm__TCopyFileRequest(soap, -1)); NOT_NULL(fileRequest->dirOption = soap_new_srm__TDirOption(soap, -1)); if(NOT_NULL_VEC(arrayOfFileRequests,allLevelRecursive)) { fileRequest->dirOption->allLevelRecursive = (bool *)arrayOfFileRequests.allLevelRecursive[u]; DM_LOG(DM_N(2), "allLevelRecursive[%u] == %d\n", u, *(fileRequest->dirOption->allLevelRecursive)); } else { fileRequest->dirOption->allLevelRecursive = NULL; DM_LOG(DM_N(2), "allLevelRecursive[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,isSourceADirectory)) { fileRequest->dirOption->isSourceADirectory = arrayOfFileRequests.isSourceADirectory[u]; DM_LOG(DM_N(2), "isSourceADirectory[%u] == %d\n", u, fileRequest->dirOption->isSourceADirectory); } else { fileRequest->dirOption->isSourceADirectory = 0; DM_LOG(DM_N(2), "isSourceADirectory == 0\n"); } if(NOT_NULL_VEC(arrayOfFileRequests,numOfLevels)) { fileRequest->dirOption->numOfLevels = arrayOfFileRequests.numOfLevels[u]; DM_LOG(DM_N(2), "numOfLevels[%u] == %d\n", u, fileRequest->dirOption->numOfLevels); } else { fileRequest->dirOption->numOfLevels = 0; DM_LOG(DM_N(2), "numOfLevels == 0\n"); } if(NOT_NULL_VEC(arrayOfFileRequests,fileStorageType)) { fileRequest->fileStorageType = (srm__TFileStorageType *)getTFileStorageType(arrayOfFileRequests.fileStorageType[u]->c_str()); DM_LOG(DM_N(2), "fileStorageType[%u] == `%s'\n", u, getTFileStorageType(*fileRequest->fileStorageType).c_str()); } else { fileRequest->fileStorageType = NULL; DM_LOG(DM_N(2), "fileStorageType[%u] == NULL\n", u); } NOT_NULL(fileRequest->fromSURLInfo = soap_new_srm__TSURLInfo(soap, -1)); if(NOT_NULL_VEC(arrayOfFileRequests,fromSURLOrStFN)) { NOT_NULL(fileRequest->fromSURLInfo->SURLOrStFN = soap_new_srm__TSURL(soap, -1)); fileRequest->fromSURLInfo->SURLOrStFN->value.assign(arrayOfFileRequests.fromSURLOrStFN[u]->c_str()); DM_LOG(DM_N(2), "fromSURLOrStFN[%u] == `%s'\n", u, fileRequest->fromSURLInfo->SURLOrStFN->value.c_str()); } else { fileRequest->fromSURLInfo->SURLOrStFN = NULL; DM_LOG(DM_N(2), "fromSURLOrStFN[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,fromStorageSystemInfo)) { NOT_NULL(fileRequest->fromSURLInfo->storageSystemInfo = soap_new_srm__TStorageSystemInfo(soap, -1)); fileRequest->fromSURLInfo->storageSystemInfo->value.assign(arrayOfFileRequests.fromStorageSystemInfo[u]->c_str()); DM_LOG(DM_N(2), "fromStorageSystemInfo[%u] == `%s'\n", u, fileRequest->fromSURLInfo->storageSystemInfo->value.c_str()); } else { fileRequest->fromSURLInfo->storageSystemInfo = NULL; DM_LOG(DM_N(2), "fromStorageSystemInfo[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,lifetime)) { NOT_NULL(fileRequest->lifetime = soap_new_srm__TLifeTimeInSeconds(soap, -1)); fileRequest->lifetime->value = *arrayOfFileRequests.lifetime[u]; DM_LOG(DM_N(2), "lifetime[%u] == %"PRIi64"\n", u, fileRequest->lifetime->value); } else { fileRequest->lifetime = NULL; DM_LOG(DM_N(2), "lifetime[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,overwriteMode)) { fileRequest->overwriteMode = (srm__TOverwriteMode *) arrayOfFileRequests.overwriteMode[u]; DM_LOG(DM_N(2), "overwriteMode[%u] == `%s'\n", u, getTOverwriteMode(*fileRequest->overwriteMode).c_str()); } else { fileRequest->overwriteMode = NULL; DM_LOG(DM_N(2), "overwriteMode[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,spaceToken)) { NOT_NULL(fileRequest->spaceToken = soap_new_srm__TSpaceToken(soap, -1)); fileRequest->spaceToken->value.assign(arrayOfFileRequests.spaceToken[u]->c_str()); DM_LOG(DM_N(2), "spaceToken[%u] == `%s'\n", u, fileRequest->spaceToken->value.c_str()); } else { fileRequest->spaceToken = NULL; DM_LOG(DM_N(2), "spaceToken[%u] == NULL\n", u); } NOT_NULL(fileRequest->toSURLInfo = soap_new_srm__TSURLInfo(soap, -1)); if(NOT_NULL_VEC(arrayOfFileRequests,toSURLOrStFN)) { NOT_NULL(fileRequest->toSURLInfo->SURLOrStFN = soap_new_srm__TSURL(soap, -1)); fileRequest->toSURLInfo->SURLOrStFN->value.assign(arrayOfFileRequests.toSURLOrStFN[u]->c_str()); DM_LOG(DM_N(2), "toSURLOrStFN[%u] == `%s'\n", u, fileRequest->toSURLInfo->SURLOrStFN->value.c_str()); } else { fileRequest->toSURLInfo->SURLOrStFN = NULL; DM_LOG(DM_N(2), "toSURLOrStFN[%u] == NULL\n", u); } if(NOT_NULL_VEC(arrayOfFileRequests,toStorageSystemInfo)) { NOT_NULL(fileRequest->toSURLInfo->storageSystemInfo = soap_new_srm__TStorageSystemInfo(soap, -1)); fileRequest->toSURLInfo->storageSystemInfo->value.assign(arrayOfFileRequests.toStorageSystemInfo[u]->c_str()); DM_LOG(DM_N(2), "toStorageSystemInfo[%u] == `%s'\n", u, fileRequest->toSURLInfo->storageSystemInfo->value.c_str()); } else { fileRequest->toSURLInfo->storageSystemInfo = NULL; DM_LOG(DM_N(2), "toStorageSystemInfo[%u] == NULL\n", u); } req.arrayOfFileRequests->copyRequestArray.push_back(fileRequest); } NEW_STDSTRING(userRequestDescription); req.overwriteOption = (srm__TOverwriteMode *) overwriteOption; DM_LOG(DM_N(2), "overwriteOption == `%s'\n", getTOverwriteMode(*req.overwriteOption).c_str()); PBOOL_VAL(removeSourceFiles); NEW_STR_VAL(storageSystemInfo,TStorageSystemInfo); NEW_INT64_VAL(totalRetryTime,TLifeTimeInSeconds); /* To send the request ... */ SOAP_CALL_SRM(Copy); RETURN(EXIT_SUCCESS); }
/** * srmPrepareToPut method. * * \param soap * \param srm_endpoint * \param authorizationID * \param fileRequests * \param userRequestDescription * \param overwriteOption * \param storageSystemInfo * \param desiredTotalRequestTime * \param desiredPinLifeTime * \param desiredFileLifeTime * \param desiredFileStorageType * \param targetSpaceToken * \param retentionPolicy * \param accessLatency * \param accessPattern * \param connectionType * \param clientNetworks * \param transferProtocols * \param resp request response * * \returns request exit status (EXIT_SUCCESS/EXIT_FAILURE) */ extern int PrepareToPut(struct soap *soap, const char *srm_endpoint, const char *authorizationID, const tArrayOfPutFileRequests fileRequests, const char *userRequestDescription, const long *overwriteOption, tStorageSystemInfo storageSystemInfo, int *desiredTotalRequestTime, int *desiredPinLifeTime, int *desiredFileLifeTime, const long *desiredFileStorageType, const char *targetSpaceToken, const long *retentionPolicy, const long *accessLatency, const long *accessPattern, const long *connectionType, std::vector <std::string *> clientNetworks, std::vector <std::string *> transferProtocols, struct srm__srmPrepareToPutResponse_ *resp) { DM_DBG_I; struct srm__srmPrepareToPutRequest req; DO_SOAP_INIT(soap); #ifdef HAVE_CGSI_PLUGIN int flags; flags = CGSI_OPT_DISABLE_NAME_CHECK; soap_register_plugin_arg (soap, client_cgsi_plugin, &flags); #else #warning "Compiling without CGSI plugin support, i.e. no security" #endif MV_CSTR2PSTR(req.authorizationID,authorizationID); /* Create the file request */ NOT_0(fileRequests.SURL, req.arrayOfFileRequests, soap_new_srm__ArrayOfTPutFileRequest(soap, -1)); for (uint u = 0; u < fileRequests.SURL.size(); u++) { DM_LOG(DM_N(2), "fileRequests.SURL[%u]\n", u); srm__TPutFileRequest *fileRequest; NOT_NULL(fileRequest = soap_new_srm__TPutFileRequest(soap, -1)); MV_PSTR2PSTR(fileRequest->targetSURL,fileRequests.SURL[u]); if(NOT_NULL_VEC(fileRequests,expectedFileSize)) { fileRequest->expectedFileSize = fileRequests.expectedFileSize[u]; DM_LOG(DM_N(2), "expectedFileSize[%u] = %"PRIi64"\n", u, *(fileRequest->expectedFileSize)); } else { fileRequest->expectedFileSize = NULL; DM_LOG(DM_N(2), "expectedFileSize[%u] == NULL\n", u); } req.arrayOfFileRequests->requestArray.push_back(fileRequest); } MV_CSTR2PSTR(req.userRequestDescription,userRequestDescription); MV_PSOAP(OverwriteMode,req.overwriteOption,overwriteOption); /* Storage system info */ MV_STORAGE_SYSTEM_INFO(req.storageSystemInfo,storageSystemInfo); MV_PINT(req.desiredTotalRequestTime,desiredTotalRequestTime); MV_PINT(req.desiredPinLifeTime,desiredPinLifeTime); MV_PINT(req.desiredFileLifeTime,desiredFileLifeTime); MV_PSOAP(FileStorageType,req.desiredFileStorageType,desiredFileStorageType); MV_CSTR2PSTR(req.targetSpaceToken,targetSpaceToken); /* Retention */ MV_RETENTION_POLICY(req.targetFileRetentionPolicyInfo,retentionPolicy,accessLatency); /* Transfer parameters */ MV_TRANSFER_PARAMETERS(req.transferParameters); /* To send the request ... */ SOAP_CALL_SRM(PrepareToPut); RETURN(EXIT_SUCCESS); }
/******************************************************************** * Parse command-line arguments (non -+ options) * * Returns: * ERR_OK: if success * >= ERR_OK: otherwise ********************************************************************/ static int s2_run(int argc, char **argv, int i) { int rval = ERR_OK, lval; int i_1 = i; Node *root = NULL; Process *proc = NULL; BOOL tp_created = FALSE; /* init progress bar */ Process::progress(-1,proc); #if defined(HAVE_SRM21) || defined(HAVE_SRM22) srm_init(); #endif lval = parse(opts.scr_fname, &root); DM_DBG(DM_N(1), "parser return value=%d\n", lval); UPDATE_MAX(rval, lval); if(rval > opts.s2_eval) { /* stop evaluation */ UPDATE_MAX(rval, ERR_NEXEC); goto cleanup; } /* create thread pool */ if(!tp_created) tp_init(opts.tp_size); tp_created = TRUE; /* pretty-print S2 tree ($ENV{VAR} are evaluated) */ if(opts.pp_fname) lval = pp_print(root); DM_DBG(DM_N(1), "pretty-printer return value=%d\n", lval); UPDATE_MAX(rval, lval); if(root) { Process::threads_init(); proc = new Process(root, NULL, NULL); if(!proc) { DM_ERR(ERR_SYSTEM, _("failed to create a Process: %s\n"), _(strerror(errno))); UPDATE_MAX(rval, ERR_SYSTEM); goto cleanup; } /* write ${0}..${n} variables */ const char *name = cmd_label(); proc->WriteVariable("0", name, TRUE); for(; i < argc; i++) { proc->WriteVariable(i2str(i - i_1 + 1).c_str(), argv[i], TRUE); } setenv("CLIENT_INFO", build_client_info(name), 1); lval = proc->eval(); Process::threads_destroy(); DM_DBG(DM_N(1), "evaluation return value=%d\n", lval); UPDATE_MAX(rval, lval); } /* after-evaluation print of the tree */ if(opts.e2_fname) lval = e2_print(root); DM_DBG(DM_N(2), "after-evaluation print return value=%d\n", lval); UPDATE_MAX(rval, lval); cleanup: /* cleanup */ DELETE(proc); /* free proc *first*, then root */ DELETE(root); /* destroy thread pool */ if(tp_created) tp_cleanup(); /* hide progress bar */ Process::progress(0,proc); DM_DBG(DM_N(1), "s2_run return value=%d\n", rval); return rval; }
/******************************************************************** * Parse command-line option (global) * * Parameters: * cfg_file: TRUE if called from a configuration file * FALSE if command-line option * * Returns: * -1: parameter was found (opt doesn't start with -+) * 0: option was found * 1: option was NOT found * 2: an error ********************************************************************/ static int parse_cmd_opt(char *opt, BOOL cfg_file) { option_item *op; int opt_off; char *p_err; if(opt == NULL) { /* internal error */ DM_ERR_ASSERT("opt == NULL\n"); return 0; } /* Process the options */ /* Parameters */ if (!(*opt == '-' || *opt == '+')) return -1; if (OPL("-0") || OPL("--e0-file")) { /* before-execution log messages filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; f_close(opts.e0_fname, &opts.e0_file); opts.e0_fname = opt + opt_off; if(strcmp(opts.e0_fname, "-") == 0) /* standard output */ opts.e0_fname = NULL; f_open(opts.e0_fname, &opts.e0_file); return 0; } if (OPL("-1") || OPL("--e1-file")) { /* after-execution log messages filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; f_close(opts.e1_fname, &opts.e1_file); opts.e1_fname = opt + opt_off; if(strcmp(opts.e1_fname, "-") == 0) /* standard output */ opts.e1_fname = NULL; f_open(opts.e1_fname, &opts.e1_file); return 0; } if (OPL("-2") || OPL("--e2-file")) { /* after-evaluation log messages filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; f_close(opts.e2_fname, &opts.e2_file); opts.e2_fname = opt + opt_off; if(strcmp(opts.e2_fname, "-") == 0) /* standard output */ opts.e2_fname = NULL; f_open(opts.e2_fname, &opts.e2_file); return 0; } if (OPL("-a") || OPL("--ansi")) { /* ANSI colors */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.ansi = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) { /* no option value given || value contains invalid/non-digit char */ opts.ansi = TRUE; } DM_ANSI_SET(opts.ansi); return 0; } if (OPL("-b") || OPL("--verbose")) { /* verbose/quiet execution */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.verbose = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) /* no option value given || value contains invalid/non-digit char */ opts.verbose = 1; /* limit verbosity */ if(opts.verbose > VERBOSE_MAX) opts.verbose = VERBOSE_MAX; else if(opts.verbose < VERBOSE_MIN) opts.verbose = VERBOSE_MIN; if(opts.verbose > 0) DM_LOG_SET_L((1 << opts.verbose) - 1); if(opts.verbose <= -1) /* disable warning messages */ DM_WARN_SET_L(0); if(opts.verbose <= -2) /* disable error messages */ DM_ERR_SET_L(0); return 0; } if (OPL("-h") || OPL("-?") || OPL("--help")) { /* help */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.help = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) { /* no option value given || value contains invalid/non-digit char */ opts.help = 0; } // hlp(opts.help); exit(0); hlp(0); /* only level 0 help so far */ exit(0); return 0; } if (OPL("-d") || OPL("--dbg-file")) { /* debug messages output filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.dbg_fname = opt + opt_off; DM_DBG_OPEN(opts.dbg_fname); /* old stream is automatically closed */ return 0; } if (OPL("-e") || OPL("--eval")) { /* default evaluation threshold for branches */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.s2_eval = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) /* no option value given || value contains invalid/non-digit char */ opts.s2_eval = S2_EVAL; return 0; } if (OPL("-f") || OPL("--file")) { /* script filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.scr_fname = opt + opt_off; if(strcmp(opts.scr_fname, "-") == 0) /* standard input */ opts.scr_fname = NULL; return 0; } if (OPL("-g") || OPL("--progress")) { /* progress bar */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.progress_bar = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) /* no option value given || value contains invalid/non-digit char */ opts.progress_bar = TRUE; return 0; } if (OPL("-i") || OPL("--pp-indent")) { /* pretty-printer indentation value */ BOOL vrb_msg = FALSE; if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.pp_indent = strtol(opt + opt_off, &p_err, 0); /* limit pretty-printer indentation */ if (opts.pp_indent > PP_INDENT_MAX) { opts.pp_indent = PP_INDENT_MAX; vrb_msg = TRUE; } else if (opts.pp_indent < PP_INDENT_MIN) { opts.pp_indent = PP_INDENT_MIN; vrb_msg = TRUE; } if (p_err == opt + opt_off || *p_err || opts.pp_indent < PP_INDENT_MIN || opts.pp_indent > PP_INDENT_MAX) { /* no option value given || value contains invalid/non-digit char */ opts.pp_indent = PP_INDENT; vrb_msg = TRUE; } if(vrb_msg) DM_DBG(DM_N(1),_("pretty-printer indentation set to %d spaces\n"), opts.pp_indent); return 0; } if (OPL("-l") || OPL("--log-file")) { /* default log filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.log_fname = opt + opt_off; DM_LOG_OPEN(opts.log_fname); /* old stream is automatically closed */ return 0; } if (OPL("-p") || OPL("--pp-out-file")) { /* pretty-printer output file */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; f_close(opts.pp_fname, &opts.pp_file); opts.pp_fname = opt + opt_off; if(strcmp(opts.pp_fname, "-") == 0) /* standard output */ opts.pp_fname = NULL; f_open(opts.pp_fname, &opts.pp_file); return 0; } if (OPL("-r") || OPL("--err-file")) { /* error messages output filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.err_fname = opt + opt_off; DM_ERR_OPEN(opts.err_fname); /* old stream is automatically closed */ return 0; } if (OPL("-s") || OPL("--show-defaults")) { /* show default values (pretty-printer, evaluator) ON/OFF */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.show_defaults = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) { /* no option value given || value contains invalid/non-digit char */ opts.show_defaults = TRUE; } return 0; } if (OPL("-S") || OPL("--simple-name")) { opts.simple_name = TRUE; } if (OPL("-T") || OPL("--threads")) { /* threads in the thread pool */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.tp_size = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) /* no option value given || value contains invalid/non-digit char */ opts.tp_size = TP_THREADS_DEF; /* limit verbosity */ if(opts.tp_size > TP_THREADS_MAX) opts.tp_size = TP_THREADS_MAX; else if(opts.tp_size < TP_THREADS_MIN) opts.tp_size = TP_THREADS_MIN; return 0; } if (OPL("-t") || OPL("--timeout")) { /* default timeout for branches */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.s2_timeout = strtol(opt + opt_off, &p_err, 0); if (p_err == opt + opt_off || *p_err) /* no option value given || value contains invalid/non-digit char */ opts.s2_timeout = S2_TIMEOUT; return 0; } if (OPL("-V") || OPL("--version")) { /* print the version and exit */ fprintf(stderr,_("%s version %s\n"), PNAME(), VERSION); exit(ERR_OK); } if (OPL("-w") || OPL("--warn-file")) { /* warning messages output filename */ if(opt_off > 2 && *(opt + opt_off) == '=') /* long option, ignore '=' */ opt_off++; opts.warn_fname = opt + opt_off; DM_WARN_OPEN(opts.warn_fname); /* old stream is automatically closed */ return 0; } /* default option handling */ if (opt[1] == '-' || opt[1] == '+') { int ret_val = 1; /* try long options */ for (op = optionlist; op->short_name; op++) { if (op->long_name && strcmp(opt+2, op->long_name) == 0) { ret_val = 0; handle_option(op->short_name); break; } } return ret_val; } else /* try short options */ return handle_option(opt+1); return 1; }