Skip to content

Commit

Permalink
Work around inconsistent type definitions on MIPS
Browse files Browse the repository at this point in the history
The st_rdev field in struct stat (which is 32 bits) is not type dev_t
(which is 64 bits)

/<<PKGBUILDDIR>>/src/XrdPosix/XrdPosixAdmin.cc:188:45: error: cannot convert ‘long unsigned int*’ to ‘dev_t*’ {aka ‘long long unsigned int*’}
  188 |    Stat.st_mode   = XrdPosixMap::Flags2Mode(&Stat.st_rdev, sInfo->GetFlags());
      |                                             ^~~~~~~~~~~~~
      |                                             |
      |                                             long unsigned int*
In file included from /<<PKGBUILDDIR>>/src/XrdPosix/XrdPosixAdmin.cc:38:
/<<PKGBUILDDIR>>/src/./XrdPosix/XrdPosixMap.hh:43:46: note:   initializing argument 1 of ‘static mode_t XrdPosixMap::Flags2Mode(dev_t*, uint32_t)’
   43 | static mode_t              Flags2Mode(dev_t *rdv, uint32_t flags);
      |                                       ~~~~~~~^~~
make[4]: *** [src/CMakeFiles/XrdPosix.dir/build.make:85: src/CMakeFiles/XrdPosix.dir/XrdPosix/XrdPosixAdmin.cc.o] Error 1
  • Loading branch information
ellert authored and gganis committed Nov 23, 2021
1 parent b3f966e commit 53f5aa7
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/XrdPosix/XrdPosixAdmin.cc
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,16 @@ bool XrdPosixAdmin::Stat(struct stat &Stat)
Stat.st_size = static_cast<size_t>(sInfo->GetSize());
Stat.st_blocks = Stat.st_size/512 + Stat.st_size%512;
Stat.st_ino = static_cast<ino_t>(strtoll(sInfo->GetId().c_str(), 0, 10));
#if defined(__mips__) && _MIPS_SIM == _ABIO32
// Work around inconsistent type definitions on MIPS
// The st_rdev field in struct stat (which is 32 bits) is not type
// dev_t (which is 64 bits)
dev_t tmp_rdev = Stat.st_rdev;
Stat.st_mode = XrdPosixMap::Flags2Mode(&tmp_rdev, sInfo->GetFlags());
Stat.st_rdev = tmp_rdev;
#else
Stat.st_mode = XrdPosixMap::Flags2Mode(&Stat.st_rdev, sInfo->GetFlags());
#endif
Stat.st_mtime = static_cast<time_t>(sInfo->GetModTime());

if (sInfo->ExtendedFormat())
Expand Down

0 comments on commit 53f5aa7

Please sign in to comment.