00001
00002
00003
00004
00005
00006 #include "fileGetFsFreeSpace.h"
00007 #include "miscServerFunct.h"
00008
00009 int
00010 rsFileGetFsFreeSpace (rsComm_t *rsComm,
00011 fileGetFsFreeSpaceInp_t *fileGetFsFreeSpaceInp,
00012 fileGetFsFreeSpaceOut_t **fileGetFsFreeSpaceOut)
00013 {
00014 rodsServerHost_t *rodsServerHost;
00015 int remoteFlag;
00016 int status;
00017
00018 *fileGetFsFreeSpaceOut = NULL;
00019
00020 remoteFlag = resolveHost (&fileGetFsFreeSpaceInp->addr, &rodsServerHost);
00021 if (remoteFlag == LOCAL_HOST) {
00022 status = _rsFileGetFsFreeSpace (rsComm, fileGetFsFreeSpaceInp,
00023 fileGetFsFreeSpaceOut);
00024 } else if (remoteFlag == REMOTE_HOST) {
00025 status = remoteFileGetFsFreeSpace (rsComm, fileGetFsFreeSpaceInp,
00026 fileGetFsFreeSpaceOut, rodsServerHost);
00027 } else {
00028 if (remoteFlag < 0) {
00029 return (remoteFlag);
00030 } else {
00031 rodsLog (LOG_NOTICE,
00032 "rsFileGetFsFreeSpace: resolveHost returned unrecognized value %d",
00033 remoteFlag);
00034 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00035 }
00036 }
00037
00038
00039
00040 return (status);
00041 }
00042
00043 int
00044 remoteFileGetFsFreeSpace (rsComm_t *rsComm,
00045 fileGetFsFreeSpaceInp_t *fileGetFsFreeSpaceInp,
00046 fileGetFsFreeSpaceOut_t **fileGetFsFreeSpaceOut,
00047 rodsServerHost_t *rodsServerHost)
00048 {
00049 int status;
00050
00051 if (rodsServerHost == NULL) {
00052 rodsLog (LOG_NOTICE,
00053 "remoteFileGetFsFreeSpace: 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 = rcFileGetFsFreeSpace (rodsServerHost->conn, fileGetFsFreeSpaceInp,
00063 fileGetFsFreeSpaceOut);
00064
00065 if (status < 0) {
00066 rodsLog (LOG_NOTICE,
00067 "remoteFileGetFsFreeSpace: rcFileGetFsFreeSpace failed for %s, status = %d",
00068 fileGetFsFreeSpaceInp->fileName, status);
00069 }
00070
00071 return status;
00072 }
00073
00074 int
00075 _rsFileGetFsFreeSpace (rsComm_t *rsComm,
00076 fileGetFsFreeSpaceInp_t *fileGetFsFreeSpaceInp,
00077 fileGetFsFreeSpaceOut_t **fileGetFsFreeSpaceOut)
00078 {
00079 rodsLong_t status;
00080
00081 status = fileGetFsFreeSpace (fileGetFsFreeSpaceInp->fileType, rsComm,
00082 fileGetFsFreeSpaceInp->fileName, fileGetFsFreeSpaceInp->flag);
00083
00084 if (status < 0) {
00085 rodsLog (LOG_NOTICE,
00086 "_rsFileGetFsFreeSpace: fileGetFsFreeSpace for %s, status = %lld",
00087 fileGetFsFreeSpaceInp->fileName, status);
00088 return ((int) status);
00089 }
00090
00091 *fileGetFsFreeSpaceOut = (fileGetFsFreeSpaceOut_t*)malloc (sizeof (fileGetFsFreeSpaceOut_t));
00092 (*fileGetFsFreeSpaceOut)->size = status;
00093
00094 return (0);
00095 }