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