00001
00002
00003
00004
00005
00006 #include "fileClosedir.h"
00007 #include "miscServerFunct.h"
00008 #include "rsGlobalExtern.h"
00009
00010
00011
00012 #include "eirods_log.h"
00013 #include "eirods_collection_object.h"
00014
00015 int
00016 rsFileClosedir (rsComm_t *rsComm, fileClosedirInp_t *fileClosedirInp)
00017 {
00018 rodsServerHost_t *rodsServerHost;
00019 int remoteFlag;
00020 int retVal;
00021
00022 remoteFlag = getServerHostByFileInx (fileClosedirInp->fileInx,
00023 &rodsServerHost);
00024
00025 if (remoteFlag == LOCAL_HOST) {
00026 retVal = _rsFileClosedir (rsComm, fileClosedirInp);
00027 } else if (remoteFlag == REMOTE_HOST) {
00028 retVal = remoteFileClosedir (rsComm, fileClosedirInp, rodsServerHost);
00029 } else {
00030 if (remoteFlag < 0) {
00031 return (remoteFlag);
00032 } else {
00033 rodsLog (LOG_NOTICE,
00034 "rsFileClosedir: resolveHost returned unrecognized value %d",
00035 remoteFlag);
00036 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00037 }
00038 }
00039
00040
00041
00042 freeFileDesc (fileClosedirInp->fileInx);
00043
00044 return (retVal);
00045 }
00046
00047 int
00048 remoteFileClosedir (rsComm_t *rsComm, fileClosedirInp_t *fileClosedirInp,
00049 rodsServerHost_t *rodsServerHost)
00050 {
00051 int status;
00052
00053 if (rodsServerHost == NULL) {
00054 rodsLog (LOG_NOTICE,
00055 "remoteFileClosedir: Invalid rodsServerHost");
00056 return SYS_INVALID_SERVER_HOST;
00057 }
00058
00059 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00060 return status;
00061 }
00062
00063
00064 status = rcFileClosedir (rodsServerHost->conn, fileClosedirInp);
00065
00066 if (status < 0) {
00067 rodsLog (LOG_NOTICE,
00068 "remoteFileClosedir: rcFileClosedir failed for %d, status = %d",
00069 fileClosedirInp->fileInx, status);
00070 }
00071
00072 return status;
00073 }
00074
00075
00076
00077 int _rsFileClosedir( rsComm_t *rsComm, fileClosedirInp_t *fileClosedirInp ) {
00078
00079
00080 eirods::collection_object coll_obj( FileDesc[fileClosedirInp->fileInx].fileName, 0, 0 );
00081 coll_obj.directory_pointer( reinterpret_cast< DIR* >( FileDesc[fileClosedirInp->fileInx].driverDep ) );
00082 eirods::error closedir_err = fileClosedir( rsComm, coll_obj );
00083
00084 if( !closedir_err.ok() ) {
00085 std::stringstream msg;
00086 msg << "_rsFileRmdir: fileClosedir for ";
00087 msg << FileDesc[fileClosedirInp->fileInx].fileName;
00088 msg << ", status = ";
00089 msg << closedir_err.code();
00090 eirods::error log_err = PASS( false, closedir_err.code(), msg.str(), closedir_err );
00091 eirods::log( log_err );
00092 }
00093
00094 return closedir_err.code();
00095
00096 }