int cpFileUtil( rcComm_t *conn, char *srcPath, char *targPath, rodsLong_t srcSize, rodsArguments_t *rodsArgs, dataObjCopyInp_t *dataObjCopyInp ) { int status; struct timeval startTime, endTime; if ( srcPath == NULL || targPath == NULL ) { rodsLog( LOG_ERROR, "cpFileUtil: NULL srcPath or targPath in cp" ); return USER__NULL_INPUT_ERR; } if ( rodsArgs->verbose == True ) { ( void ) gettimeofday( &startTime, ( struct timezone * )0 ); } if ( gGuiProgressCB != NULL ) { rstrcpy( conn->operProgress.curFileName, srcPath, MAX_NAME_LEN ); conn->operProgress.curFileSize = srcSize; conn->operProgress.curFileSizeDone = 0; conn->operProgress.flag = 0; gGuiProgressCB( &conn->operProgress ); } rstrcpy( dataObjCopyInp->destDataObjInp.objPath, targPath, MAX_NAME_LEN ); rstrcpy( dataObjCopyInp->srcDataObjInp.objPath, srcPath, MAX_NAME_LEN ); dataObjCopyInp->srcDataObjInp.dataSize = -1; status = rcDataObjCopy( conn, dataObjCopyInp ); if ( status >= 0 ) { if ( rodsArgs->verbose == True ) { ( void ) gettimeofday( &endTime, ( struct timezone * )0 ); printTiming( conn, dataObjCopyInp->destDataObjInp.objPath, conn->transStat.bytesWritten, NULL, &startTime, &endTime ); } if ( gGuiProgressCB != NULL ) { conn->operProgress.totalNumFilesDone++; conn->operProgress.totalFileSizeDone += srcSize; } } return status; }
int rsyncDataToDataUtil (rcComm_t *conn, rodsPath_t *srcPath, rodsPath_t *targPath, rodsEnv *myRodsEnv, rodsArguments_t *myRodsArgs, dataObjCopyInp_t *dataObjCopyInp) { int status; struct timeval startTime, endTime; int syncFlag = 0; int cpFlag = 0; if (srcPath == NULL || targPath == NULL) { rodsLog (LOG_ERROR, "rsyncDataToDataUtil: NULL srcPath or targPath input"); return (USER__NULL_INPUT_ERR); } /* check the age */ if (myRodsArgs->age == True) { if (srcPath->rodsObjStat != NULL) { if (ageExceeded (myRodsArgs->agevalue, atoi (srcPath->rodsObjStat->modifyTime), myRodsArgs->verbose, srcPath->outPath, srcPath->size)) return 0; } } if (myRodsArgs->verbose == True) { (void) gettimeofday(&startTime, (struct timezone *)0); bzero (&conn->transStat, sizeof (transStat_t)); } if (targPath->objState == NOT_EXIST_ST) { cpFlag = 1; } else if (myRodsArgs->sizeFlag == True) { /* sync by size */ if (targPath->size != srcPath->size) { cpFlag = 1; } } else if (strlen (srcPath->chksum) > 0 && strlen (targPath->chksum) > 0) { /* src and trg has a checksum value */ if (strcmp (targPath->chksum, srcPath->chksum) != 0) { cpFlag = 1; } } else { syncFlag = 1; } if (cpFlag == 1) { rstrcpy (dataObjCopyInp->srcDataObjInp.objPath, srcPath->outPath, MAX_NAME_LEN); dataObjCopyInp->srcDataObjInp.dataSize = srcPath->size; rstrcpy (dataObjCopyInp->destDataObjInp.objPath, targPath->outPath, MAX_NAME_LEN); /* only do the sync if no -l option specified */ if ( myRodsArgs->longOption != True ) { status = rcDataObjCopy (conn, dataObjCopyInp); } else { status = 0; printf ("%s %lld N\n", srcPath->outPath, srcPath->size); } } else if (syncFlag == 1) { dataObjInp_t *dataObjOprInp = &dataObjCopyInp->destDataObjInp; rstrcpy (dataObjOprInp->objPath, srcPath->outPath, MAX_NAME_LEN); dataObjOprInp->dataSize = srcPath->size; addKeyVal (&dataObjOprInp->condInput, RSYNC_DEST_PATH_KW, targPath->outPath); addKeyVal (&dataObjOprInp->condInput, RSYNC_MODE_KW, IRODS_TO_IRODS); /* only do the sync if no -l option specified */ if ( myRodsArgs->longOption != True ) { status = rcDataObjRsync (conn, dataObjOprInp); } else { status = 0; printf ("%s %lld N\n", srcPath->outPath, srcPath->size); } rmKeyVal (&dataObjOprInp->condInput, RSYNC_MODE_KW); rmKeyVal (&dataObjOprInp->condInput, RSYNC_DEST_PATH_KW); } else { status = 0; } if (status >= 0 && myRodsArgs->verbose == True) { if (cpFlag > 0 || (syncFlag > 0 && status == SYS_RSYNC_TARGET_MODIFIED)) { (void) gettimeofday(&endTime, (struct timezone *)0); printTiming (conn, srcPath->outPath, srcPath->size, targPath->outPath, &startTime, &endTime); } else { printNoSync (srcPath->outPath, srcPath->size, "a match"); } } return (status); }