nfs-ganesha 1.4

fsal_convert.c

Go to the documentation of this file.
00001 /*
00002  * vim:expandtab:shiftwidth=4:tabstop=4:
00003  */
00004 
00015 #ifdef HAVE_CONFIG_H
00016 #include "config.h"
00017 #endif
00018 #include "fsal_convert.h"
00019 #include <sys/types.h>
00020 #include <sys/stat.h>
00021 #include <errno.h>
00022 #include <string.h>
00023 #include <fcntl.h>
00024 
00025 #define MAX_2( x, y )    ( (x) > (y) ? (x) : (y) )
00026 #define MAX_3( x, y, z ) ( (x) > (y) ? MAX_2((x),(z)) : MAX_2((y),(z)) )
00027 
00037 int fsal2posix_testperm(fsal_accessflags_t testperm)
00038 {
00039 
00040   int posix_testperm = 0;
00041 
00042   if(testperm & FSAL_R_OK)
00043     posix_testperm |= R_OK;
00044   if(testperm & FSAL_W_OK)
00045     posix_testperm |= W_OK;
00046   if(testperm & FSAL_X_OK)
00047     posix_testperm |= X_OK;
00048   if(testperm & FSAL_F_OK)
00049     posix_testperm |= F_OK;
00050 
00051   return posix_testperm;
00052 
00053 }
00054 
00064 mode_t fsal2unix_mode(fsal_accessmode_t fsal_mode)
00065 {
00066 
00067   mode_t out_mode = 0;
00068 
00069   if((fsal_mode & FSAL_MODE_SUID))
00070     out_mode |= S_ISUID;
00071   if((fsal_mode & FSAL_MODE_SGID))
00072     out_mode |= S_ISGID;
00073   if((fsal_mode & FSAL_MODE_SVTX))
00074     out_mode |= S_ISVTX;
00075 
00076   if((fsal_mode & FSAL_MODE_RUSR))
00077     out_mode |= S_IRUSR;
00078   if((fsal_mode & FSAL_MODE_WUSR))
00079     out_mode |= S_IWUSR;
00080   if((fsal_mode & FSAL_MODE_XUSR))
00081     out_mode |= S_IXUSR;
00082   if((fsal_mode & FSAL_MODE_RGRP))
00083     out_mode |= S_IRGRP;
00084   if((fsal_mode & FSAL_MODE_WGRP))
00085     out_mode |= S_IWGRP;
00086   if((fsal_mode & FSAL_MODE_XGRP))
00087     out_mode |= S_IXGRP;
00088   if((fsal_mode & FSAL_MODE_ROTH))
00089     out_mode |= S_IROTH;
00090   if((fsal_mode & FSAL_MODE_WOTH))
00091     out_mode |= S_IWOTH;
00092   if((fsal_mode & FSAL_MODE_XOTH))
00093     out_mode |= S_IXOTH;
00094 
00095   return out_mode;
00096 
00097 }
00098 
00108 fsal_accessmode_t unix2fsal_mode(mode_t unix_mode)
00109 {
00110 
00111   fsal_accessmode_t fsalmode = 0;
00112 
00113   if(unix_mode & S_ISUID)
00114     fsalmode |= FSAL_MODE_SUID;
00115   if(unix_mode & S_ISGID)
00116     fsalmode |= FSAL_MODE_SGID;
00117   if(unix_mode & S_ISVTX)
00118     fsalmode |= FSAL_MODE_SVTX;
00119 
00120   if(unix_mode & S_IRUSR)
00121     fsalmode |= FSAL_MODE_RUSR;
00122   if(unix_mode & S_IWUSR)
00123     fsalmode |= FSAL_MODE_WUSR;
00124   if(unix_mode & S_IXUSR)
00125     fsalmode |= FSAL_MODE_XUSR;
00126 
00127   if(unix_mode & S_IRGRP)
00128     fsalmode |= FSAL_MODE_RGRP;
00129   if(unix_mode & S_IWGRP)
00130     fsalmode |= FSAL_MODE_WGRP;
00131   if(unix_mode & S_IXGRP)
00132     fsalmode |= FSAL_MODE_XGRP;
00133 
00134   if(unix_mode & S_IROTH)
00135     fsalmode |= FSAL_MODE_ROTH;
00136   if(unix_mode & S_IWOTH)
00137     fsalmode |= FSAL_MODE_WOTH;
00138   if(unix_mode & S_IXOTH)
00139     fsalmode |= FSAL_MODE_XOTH;
00140 
00141   return fsalmode;
00142 
00143 }
00144 
00155 fsal_nodetype_t posix2fsal_type(mode_t posix_type_in)
00156 {
00157 
00158   switch (posix_type_in & S_IFMT)
00159     {
00160     case S_IFIFO:
00161       return FSAL_TYPE_FIFO;
00162 
00163     case S_IFCHR:
00164       return FSAL_TYPE_CHR;
00165 
00166     case S_IFDIR:
00167       return FSAL_TYPE_DIR;
00168 
00169     case S_IFBLK:
00170       return FSAL_TYPE_BLK;
00171 
00172     case S_IFREG:
00173     case S_IFMT:
00174       return FSAL_TYPE_FILE;
00175 
00176     case S_IFLNK:
00177       return FSAL_TYPE_LNK;
00178 
00179     case S_IFSOCK:
00180       return FSAL_TYPE_SOCK;
00181 
00182     default:
00183       LogWarn(COMPONENT_FSAL, "Unknown object type: %d", posix_type_in);
00184       return -1;
00185     }
00186 
00187 }
00188 
00189 fsal_time_t posix2fsal_time(time_t tsec, time_t nsec)
00190 {
00191   fsal_time_t fsaltime;
00192 
00193   fsaltime.seconds = (fsal_uint_t) tsec;
00194   fsaltime.nseconds = (fsal_uint_t) nsec;
00195 
00196   return fsaltime;
00197 }
00198 
00199 fsal_fsid_t posix2fsal_fsid(dev_t posix_devid)
00200 {
00201 
00202   fsal_fsid_t fsid;
00203 
00204   fsid.major = (fsal_u64_t) posix_devid;
00205   fsid.minor = 0;
00206 
00207   return fsid;
00208 
00209 }
00210 
00211 fsal_dev_t posix2fsal_devt(dev_t posix_devid)
00212 {
00213 
00214   fsal_dev_t dev;
00215 
00216   dev.major = major(posix_devid);
00217   dev.minor = minor(posix_devid);
00218 
00219   return dev;
00220 }