304 | | return InitCheck() == B_OK |
305 | | && ((fMode & O_RWMASK) == O_RDONLY || (fMode & O_RWMASK) == O_RDWR); |
| 304 | if (InitCheck() != B_OK) |
| 305 | return false; |
| 306 | |
| 307 | struct stat st; |
| 308 | if (!fstat(get_fd(), &st)) { |
| 309 | return false; |
| 310 | } |
| 311 | |
| 312 | unsigned int fUid = getuid(); |
| 313 | unsigned int fGid = getgid(); |
| 314 | |
| 315 | bool fReadable = !((fUid == st.st_uid && (S_IRUSR & st.st_mode)) |
| 316 | || (fGid == st.st_gid && (S_IRGRP & st.st_mode)) |
| 317 | || (S_IROTH & st.st_mode)); |
| 318 | |
| 319 | if (false==fReadable) |
| 320 | return false; |
| 321 | |
| 322 | return (fMode & O_RWMASK) == O_RDONLY || (fMode & O_RWMASK) == O_RDWR; |
318 | | return InitCheck() == B_OK |
319 | | && ((fMode & O_RWMASK) == O_WRONLY || (fMode & O_RWMASK) == O_RDWR); |
| 335 | if (InitCheck() != B_OK) |
| 336 | return false; |
| 337 | |
| 338 | struct stat st; |
| 339 | if (!fstat(get_fd(), &st)) { |
| 340 | return false; |
| 341 | } |
| 342 | |
| 343 | unsigned int fUid = getuid(); |
| 344 | unsigned int fGid = getgid(); |
| 345 | |
| 346 | bool fReadOnly = !((fUid == st.st_uid && (S_IWUSR & st.st_mode)) |
| 347 | || (fGid == st.st_gid && (S_IWGRP & st.st_mode)) |
| 348 | || (S_IWOTH & st.st_mode)); |
| 349 | |
| 350 | if (true==fReadOnly) |
| 351 | return false; |
| 352 | |
| 353 | return (fMode & O_RWMASK) == O_WRONLY || (fMode & O_RWMASK) == O_RDWR; |