00001
00002
00003 #include "structFileDriver.h"
00004 #include "subStructFileStat.h"
00005 #include "miscServerFunct.h"
00006 #include "dataObjOpr.h"
00007
00008
00009 int
00010 rsSubStructFileStat (rsComm_t *rsComm, subFile_t *subFile, rodsStat_t **subStructFileStatOut)
00011 {
00012 rodsServerHost_t *rodsServerHost;
00013 int remoteFlag;
00014 int status;
00015
00016 remoteFlag = resolveHost (&subFile->addr, &rodsServerHost);
00017
00018 if (remoteFlag == LOCAL_HOST) {
00019 status = _rsSubStructFileStat (rsComm, subFile, subStructFileStatOut);
00020 } else if (remoteFlag == REMOTE_HOST) {
00021 status = remoteSubStructFileStat (rsComm, subFile, subStructFileStatOut,
00022 rodsServerHost);
00023 } else {
00024 if (remoteFlag < 0) {
00025 return (remoteFlag);
00026 } else {
00027 rodsLog (LOG_NOTICE,
00028 "rsSubStructFileStat: resolveHost returned unrecognized value %d",
00029 remoteFlag);
00030 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00031 }
00032 }
00033
00034 return (status);
00035 }
00036
00037 int
00038 remoteSubStructFileStat (rsComm_t *rsComm, subFile_t *subFile,
00039 rodsStat_t **subStructFileStatOut, rodsServerHost_t *rodsServerHost)
00040 {
00041 int status;
00042
00043 if (rodsServerHost == NULL) {
00044 rodsLog (LOG_NOTICE,
00045 "remoteSubStructFileStat: Invalid rodsServerHost");
00046 return SYS_INVALID_SERVER_HOST;
00047 }
00048
00049 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00050 return status;
00051 }
00052
00053 status = rcSubStructFileStat (rodsServerHost->conn, subFile, subStructFileStatOut);
00054
00055 if (status < 0 && getErrno (status) != ENOENT) {
00056 rodsLog (LOG_NOTICE,
00057 "remoteSubStructFileStat: rcSubStructFileStat failed for %s, status = %d",
00058 subFile->subFilePath, status);
00059 }
00060
00061 return status;
00062 }
00063
00064 int
00065 _rsSubStructFileStat (rsComm_t *rsComm, subFile_t *subFile, rodsStat_t **subStructFileStatOut)
00066 {
00067 int status;
00068
00069 status = subStructFileStat (rsComm, subFile, subStructFileStatOut);
00070 if (status < 0) {
00071 *subStructFileStatOut = NULL;
00072 }
00073
00074 return (status);
00075 }
00076