00001
00002
00003
00004
00005
00006 #include "fileMkdir.h"
00007 #include "miscServerFunct.h"
00008
00009
00010
00011 #include "eirods_log.h"
00012 #include "eirods_collection_object.h"
00013
00014 int
00015 rsFileMkdir (rsComm_t *rsComm, fileMkdirInp_t *fileMkdirInp)
00016 {
00017 rodsServerHost_t *rodsServerHost;
00018 int remoteFlag;
00019 int status;
00020
00021 remoteFlag = resolveHost (&fileMkdirInp->addr, &rodsServerHost);
00022 if (remoteFlag == LOCAL_HOST) {
00023 status = _rsFileMkdir (rsComm, fileMkdirInp);
00024 } else if (remoteFlag == REMOTE_HOST) {
00025 status = remoteFileMkdir (rsComm, fileMkdirInp, rodsServerHost);
00026 } else {
00027 if (remoteFlag < 0) {
00028 return (remoteFlag);
00029 } else {
00030 rodsLog (LOG_NOTICE,
00031 "rsFileMkdir: resolveHost returned unrecognized value %d",
00032 remoteFlag);
00033 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00034 }
00035 }
00036
00037
00038
00039 return (status);
00040 }
00041
00042 int
00043 remoteFileMkdir (rsComm_t *rsComm, fileMkdirInp_t *fileMkdirInp,
00044 rodsServerHost_t *rodsServerHost)
00045 {
00046 int status;
00047
00048 if (rodsServerHost == NULL) {
00049 rodsLog (LOG_NOTICE,
00050 "remoteFileMkdir: Invalid rodsServerHost");
00051 return SYS_INVALID_SERVER_HOST;
00052 }
00053
00054 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00055 return status;
00056 }
00057
00058
00059 status = rcFileMkdir (rodsServerHost->conn, fileMkdirInp);
00060
00061 if (status < 0) {
00062 rodsLog (LOG_NOTICE,
00063 "remoteFileOpen: rcFileMkdir failed for %s",
00064 fileMkdirInp->dirName);
00065 }
00066
00067 return status;
00068 }
00069
00070
00071
00072 int _rsFileMkdir( rsComm_t *rsComm, fileMkdirInp_t *fileMkdirInp ) {
00073
00074
00075
00076 eirods::collection_object coll_obj( fileMkdirInp->dirName, fileMkdirInp->mode, 0 );
00077 eirods::error mkdir_err = fileMkdir( rsComm, coll_obj );
00078
00079
00080
00081 if( !mkdir_err.ok() ) {
00082 if( getErrno( mkdir_err.code() ) != EEXIST ) {
00083 std::stringstream msg;
00084 msg << "_rsFileMkdir: fileMkdir for ";
00085 msg << fileMkdirInp->dirName;
00086 msg << ", status = ";
00087 msg << mkdir_err.code();
00088 eirods::error ret_err = PASS( false, mkdir_err.code(), msg.str(), mkdir_err );
00089 eirods::log( ret_err );
00090 }
00091 }
00092
00093 return (mkdir_err.code());
00094
00095 }
00096
00097
00098