int _rsModAVUMetadata( rsComm_t *rsComm, modAVUMetadataInp_t *modAVUMetadataInp ) { int status, status2; const char *args[MAX_NUM_OF_ARGS_IN_ACTION]; int argc; ruleExecInfo_t rei2; memset( ( char* )&rei2, 0, sizeof( ruleExecInfo_t ) ); rei2.rsComm = rsComm; if ( rsComm != NULL ) { rei2.uoic = &rsComm->clientUser; rei2.uoip = &rsComm->proxyUser; } args[0] = modAVUMetadataInp->arg0; // option add, adda, rm, rmw, rmi, cp, mod, or set args[1] = modAVUMetadataInp->arg1; // item type -d,-D,-c,-C,-r,-R,-u,-U args[2] = modAVUMetadataInp->arg2; // item name args[3] = modAVUMetadataInp->arg3; // attr name args[4] = modAVUMetadataInp->arg4; // attr val args[5] = modAVUMetadataInp->arg5; // attr unit if ( args[5] == NULL ) { args[5] = ""; } if ( strcmp( args[0], "mod" ) == 0 ) { argc = 9; #define ARG(arg) { int ix; if( ( ix = checkModArgType(arg) ) >= 0 ) avu[ix] = arg; } if ( checkModArgType( modAVUMetadataInp->arg5 ) != 0 ) { char *avu[4] = {"", "", "", ""}; ARG( modAVUMetadataInp->arg5 ); ARG( modAVUMetadataInp->arg6 ); ARG( modAVUMetadataInp->arg7 ); args[5] = ""; memcpy( args + 6, avu + 1, sizeof( char *[3] ) ); } else { char *avu[4] = {"", "", "", ""}; ARG( modAVUMetadataInp->arg6 ); /* new attr */ ARG( modAVUMetadataInp->arg7 ); /* new val */ ARG( modAVUMetadataInp->arg8 ); /* new unit */ memcpy( args + 6, avu + 1, sizeof( char *[3] ) ); } } else if ( strcmp( args[0], "cp" ) == 0 ) { argc = 5; } else { argc = 6; } status2 = applyRuleArg( "acPreProcForModifyAVUMetadata", args, argc, &rei2, NO_SAVE_REI ); if ( status2 < 0 ) { if ( rei2.status < 0 ) { status2 = rei2.status; } rodsLog( LOG_ERROR, "rsModAVUMetadata:acPreProcForModifyAVUMetadata error for %s of type %s and option %s,stat=%d", modAVUMetadataInp->arg2, modAVUMetadataInp->arg1, modAVUMetadataInp->arg0, status2 ); return status2; } if ( strcmp( modAVUMetadataInp->arg0, "add" ) == 0 ) { status = chlAddAVUMetadata( rsComm, 0, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5 ); } else if ( strcmp( modAVUMetadataInp->arg0, "adda" ) == 0 ) { status = chlAddAVUMetadata( rsComm, 1, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5 ); } else if ( strcmp( modAVUMetadataInp->arg0, "addw" ) == 0 ) { status = chlAddAVUMetadataWild( rsComm, 0, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5 ); } else if ( strcmp( modAVUMetadataInp->arg0, "rmw" ) == 0 ) { status = chlDeleteAVUMetadata( rsComm, 1, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, 0 ); } else if ( strcmp( modAVUMetadataInp->arg0, "rmi" ) == 0 ) { status = chlDeleteAVUMetadata( rsComm, 2, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, 0 ); } else if ( strcmp( modAVUMetadataInp->arg0, "rm" ) == 0 ) { status = chlDeleteAVUMetadata( rsComm, 0, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, 0 ); } else if ( strcmp( modAVUMetadataInp->arg0, "cp" ) == 0 ) { status = chlCopyAVUMetadata( rsComm, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4 ); } else if ( strcmp( modAVUMetadataInp->arg0, "mod" ) == 0 ) { status = chlModAVUMetadata( rsComm, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, modAVUMetadataInp->arg6, modAVUMetadataInp->arg7, modAVUMetadataInp->arg8 ); } else if ( strcmp( modAVUMetadataInp->arg0, "set" ) == 0 ) { // JMC - backport 4836 status = chlSetAVUMetadata( rsComm, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5 ); } else { return CAT_INVALID_ARGUMENT; } if ( status >= 0 ) { status2 = applyRuleArg( "acPostProcForModifyAVUMetadata", args, argc, &rei2, NO_SAVE_REI ); if ( status2 < 0 ) { if ( rei2.status < 0 ) { status2 = rei2.status; } rodsLog( LOG_ERROR, "rsModAVUMetadata:acPostProcForModifyAVUMetadata error for %s of type %s and option %s,stat=%d", modAVUMetadataInp->arg2, modAVUMetadataInp->arg1, modAVUMetadataInp->arg0, status2 ); return status2; } } return status; }
int _rsModAVUMetadata (rsComm_t *rsComm, modAVUMetadataInp_t *modAVUMetadataInp ) { int status; char *args[MAX_NUM_OF_ARGS_IN_ACTION]; int i, argc; ruleExecInfo_t rei2; memset ((char*)&rei2, 0, sizeof (ruleExecInfo_t)); rei2.rsComm = rsComm; if (rsComm != NULL) { rei2.uoic = &rsComm->clientUser; rei2.uoip = &rsComm->proxyUser; } /** RAJA ADDED June 1 2009 for pre-post processing rule hooks **/ args[0] = modAVUMetadataInp->arg0; /* option add, adda, rm, rmw, rmi, cp, or mod */ args[1] = modAVUMetadataInp->arg1; /* item type -d,-d,-c,-C,-r,-R,-u,-U */ args[2] = modAVUMetadataInp->arg2; /* item name */ args[3] = modAVUMetadataInp->arg3; /* attr name */ args[4] = modAVUMetadataInp->arg4; /* attr val */ args[5] = modAVUMetadataInp->arg5; /* attr unit */ if (args[5]) { argc = 6; } else { argc = 5; } i = applyRuleArg("acPreProcForModifyAVUMetadata",args,argc, &rei2, NO_SAVE_REI); if (i < 0) { if (rei2.status < 0) { i = rei2.status; } rodsLog (LOG_ERROR, "rsModAVUMetadata:acPreProcForModifyAVUMetadata error for %s of type %s and option %s,stat=%d", modAVUMetadataInp->arg2,modAVUMetadataInp->arg1,modAVUMetadataInp->arg0, i); return i; } /** RAJA ADDED June 1 2009 for pre-post processing rule hooks **/ if (strcmp(modAVUMetadataInp->arg0,"add")==0) { status = chlAddAVUMetadata(rsComm, 0, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5); } else if (strcmp(modAVUMetadataInp->arg0,"adda")==0) { status = chlAddAVUMetadata(rsComm, 1, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5); } else if (strcmp(modAVUMetadataInp->arg0,"addw")==0) { status = chlAddAVUMetadataWild(rsComm, 0, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5); } else if (strcmp(modAVUMetadataInp->arg0,"rmw")==0) { status = chlDeleteAVUMetadata(rsComm, 1, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, 0); } else if (strcmp(modAVUMetadataInp->arg0,"rmi")==0) { status = chlDeleteAVUMetadata(rsComm, 2, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, 0); } else if (strcmp(modAVUMetadataInp->arg0,"rm")==0) { status = chlDeleteAVUMetadata(rsComm, 0, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, 0); } else if (strcmp(modAVUMetadataInp->arg0,"cp")==0) { status = chlCopyAVUMetadata(rsComm, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4); } else if (strcmp(modAVUMetadataInp->arg0,"mod")==0) { status = chlModAVUMetadata(rsComm, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5, modAVUMetadataInp->arg6, modAVUMetadataInp->arg7, modAVUMetadataInp->arg8); } else if (strcmp(modAVUMetadataInp->arg0,"set")==0) { status = chlSetAVUMetadata(rsComm, modAVUMetadataInp->arg1, modAVUMetadataInp->arg2, modAVUMetadataInp->arg3, modAVUMetadataInp->arg4, modAVUMetadataInp->arg5); } else { return(CAT_INVALID_ARGUMENT); } /** RAJA ADDED June 1 2009 for pre-post processing rule hooks **/ i = applyRuleArg("acPostProcForModifyAVUMetadata",args,argc, &rei2, NO_SAVE_REI); if (i < 0) { if (rei2.status < 0) { i = rei2.status; } rodsLog (LOG_ERROR, "rsModAVUMetadata:acPostProcForModifyAVUMetadata error for %s of type %s and option %s,stat=%d", modAVUMetadataInp->arg2,modAVUMetadataInp->arg1,modAVUMetadataInp->arg0, i); return i; } /** RAJA ADDED June 1 2009 for pre-post processing rule hooks **/ return(status); }