00001
00002
00003 #include "structFileDriver.h"
00004 #include "subStructFileLseek.h"
00005 #include "miscServerFunct.h"
00006 #include "dataObjOpr.h"
00007
00008 int
00009 rsSubStructFileLseek (rsComm_t *rsComm, subStructFileLseekInp_t *subStructFileLseekInp,
00010 fileLseekOut_t **subStructFileLseekOut)
00011 {
00012 rodsServerHost_t *rodsServerHost;
00013 int remoteFlag;
00014 int status;
00015
00016 remoteFlag = resolveHost (&subStructFileLseekInp->addr, &rodsServerHost);
00017
00018 if (remoteFlag == LOCAL_HOST) {
00019 status = _rsSubStructFileLseek (rsComm, subStructFileLseekInp, subStructFileLseekOut);
00020 } else if (remoteFlag == REMOTE_HOST) {
00021 status = remoteSubStructFileLseek (rsComm, subStructFileLseekInp, subStructFileLseekOut,
00022 rodsServerHost);
00023 } else {
00024 if (remoteFlag < 0) {
00025 return (remoteFlag);
00026 } else {
00027 rodsLog (LOG_NOTICE,
00028 "rsSubStructFileLseek: resolveHost returned unrecognized value %d",
00029 remoteFlag);
00030 return (SYS_UNRECOGNIZED_REMOTE_FLAG);
00031 }
00032 }
00033
00034 return (status);
00035 }
00036
00037 int
00038 remoteSubStructFileLseek (rsComm_t *rsComm, subStructFileLseekInp_t *subStructFileLseekInp,
00039 fileLseekOut_t **subStructFileLseekOut, rodsServerHost_t *rodsServerHost)
00040 {
00041 int status;
00042
00043 if (rodsServerHost == NULL) {
00044 rodsLog (LOG_NOTICE,
00045 "remoteSubStructFileLseek: Invalid rodsServerHost");
00046 return SYS_INVALID_SERVER_HOST;
00047 }
00048
00049 if ((status = svrToSvrConnect (rsComm, rodsServerHost)) < 0) {
00050 return status;
00051 }
00052
00053 status = rcSubStructFileLseek (rodsServerHost->conn, subStructFileLseekInp,
00054 subStructFileLseekOut);
00055
00056 if (status < 0) {
00057 rodsLog (LOG_NOTICE,
00058 "remoteSubStructFileLseek: rcFileLseek failed for fd %d",
00059 subStructFileLseekInp->fd);
00060 }
00061
00062 return status;
00063 }
00064
00065 int
00066 _rsSubStructFileLseek (rsComm_t *rsComm, subStructFileLseekInp_t *subStructFileLseekInp,
00067 fileLseekOut_t **subStructFileLseekOut)
00068 {
00069 rodsLong_t lStatus;
00070 int status;
00071
00072 *subStructFileLseekOut = (fileLseekOut_t *) malloc (sizeof (fileLseekOut_t));
00073 memset (*subStructFileLseekOut, 0, sizeof (fileLseekOut_t));
00074 lStatus = subStructFileLseek (subStructFileLseekInp->type, rsComm, subStructFileLseekInp->fd,
00075 subStructFileLseekInp->offset, subStructFileLseekInp->whence);
00076
00077 if (lStatus < 0) {
00078 status = lStatus;
00079 rodsLog (LOG_ERROR,
00080 "rsSubStructFileLseek: subStructFileLseek failed for %d, status = %d",
00081 subStructFileLseekInp->fd, status);
00082 return (status);
00083 } else {
00084 *subStructFileLseekOut = (fileLseekOut_t *) malloc (sizeof (fileLseekOut_t));
00085 memset (*subStructFileLseekOut, 0, sizeof (fileLseekOut_t));
00086 (*subStructFileLseekOut)->offset = lStatus;
00087 status = 0;
00088 }
00089
00090 return (status);
00091 }
00092