in cachelib/shm/PosixShmSegment.cpp [35:69]
int shmOpenImpl(const char* name, int flags) {
const int fd = shm_open(name, flags, kRWMode);
if (fd != -1) {
return fd;
}
switch (errno) {
case EEXIST:
case EMFILE:
case ENFILE:
case EACCES:
util::throwSystemError(errno);
break;
case ENAMETOOLONG:
case EINVAL:
util::throwSystemError(errno, "Invalid segment name");
break;
case ENOENT:
if (!(flags & O_CREAT)) {
util::throwSystemError(errno);
} else {
XDCHECK(false);
// FIXME: posix says that ENOENT is thrown only when O_CREAT
// is not set. However, it seems to be set even when O_CREAT
// was set and the parent of path name does not exist.
util::throwSystemError(errno, "Invalid errno");
}
break;
default:
XDCHECK(false);
util::throwSystemError(errno, "Invalid errno");
}
return kInvalidFD;
}