OLD | NEW |
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ | 1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 /* This Source Code Form is subject to the terms of the Mozilla Public | 2 /* This Source Code Form is subject to the terms of the Mozilla Public |
3 * License, v. 2.0. If a copy of the MPL was not distributed with this | 3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
5 | 5 |
6 #include "primpl.h" | 6 #include "primpl.h" |
7 | 7 |
8 #include <string.h> | 8 #include <string.h> |
9 #include <signal.h> | 9 #include <signal.h> |
10 #include <unistd.h> | 10 #include <unistd.h> |
(...skipping 3596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3607 _PR_MD_MAP_MMAP_ERROR(_MD_ERRNO()); | 3607 _PR_MD_MAP_MMAP_ERROR(_MD_ERRNO()); |
3608 addr = NULL; | 3608 addr = NULL; |
3609 } | 3609 } |
3610 return addr; | 3610 return addr; |
3611 } | 3611 } |
3612 | 3612 |
3613 PRStatus _MD_MemUnmap(void *addr, PRUint32 len) | 3613 PRStatus _MD_MemUnmap(void *addr, PRUint32 len) |
3614 { | 3614 { |
3615 if (munmap(addr, len) == 0) { | 3615 if (munmap(addr, len) == 0) { |
3616 return PR_SUCCESS; | 3616 return PR_SUCCESS; |
3617 } else { | |
3618 if (errno == EINVAL) { | |
3619 PR_SetError(PR_INVALID_ARGUMENT_ERROR, errno); | |
3620 } else { | |
3621 PR_SetError(PR_UNKNOWN_ERROR, errno); | |
3622 } | 3617 } |
3623 return PR_FAILURE; | 3618 _PR_MD_MAP_DEFAULT_ERROR(errno); |
3624 } | 3619 return PR_FAILURE; |
3625 } | 3620 } |
3626 | 3621 |
3627 PRStatus _MD_CloseFileMap(PRFileMap *fmap) | 3622 PRStatus _MD_CloseFileMap(PRFileMap *fmap) |
3628 { | 3623 { |
3629 if ( PR_TRUE == fmap->md.isAnonFM ) { | 3624 if ( PR_TRUE == fmap->md.isAnonFM ) { |
3630 PRStatus rc = PR_Close( fmap->fd ); | 3625 PRStatus rc = PR_Close( fmap->fd ); |
3631 if ( PR_FAILURE == rc ) { | 3626 if ( PR_FAILURE == rc ) { |
3632 PR_LOG( _pr_io_lm, PR_LOG_DEBUG, | 3627 PR_LOG( _pr_io_lm, PR_LOG_DEBUG, |
3633 ("_MD_CloseFileMap(): error closing anonymnous file map osfd")); | 3628 ("_MD_CloseFileMap(): error closing anonymnous file map osfd")); |
3634 return PR_FAILURE; | 3629 return PR_FAILURE; |
3635 } | 3630 } |
3636 } | 3631 } |
3637 PR_DELETE(fmap); | 3632 PR_DELETE(fmap); |
3638 return PR_SUCCESS; | 3633 return PR_SUCCESS; |
3639 } | 3634 } |
3640 | 3635 |
| 3636 PRStatus _MD_SyncMemMap( |
| 3637 PRFileDesc *fd, |
| 3638 void *addr, |
| 3639 PRUint32 len) |
| 3640 { |
| 3641 /* msync(..., MS_SYNC) alone is sufficient to flush modified data to disk |
| 3642 * synchronously. It is not necessary to call fsync. */ |
| 3643 if (msync(addr, len, MS_SYNC) == 0) { |
| 3644 return PR_SUCCESS; |
| 3645 } |
| 3646 _PR_MD_MAP_DEFAULT_ERROR(errno); |
| 3647 return PR_FAILURE; |
| 3648 } |
| 3649 |
3641 #if defined(_PR_NEED_FAKE_POLL) | 3650 #if defined(_PR_NEED_FAKE_POLL) |
3642 | 3651 |
3643 /* | 3652 /* |
3644 * Some platforms don't have poll(). For easier porting of code | 3653 * Some platforms don't have poll(). For easier porting of code |
3645 * that calls poll(), we emulate poll() using select(). | 3654 * that calls poll(), we emulate poll() using select(). |
3646 */ | 3655 */ |
3647 | 3656 |
3648 int poll(struct pollfd *filedes, unsigned long nfds, int timeout) | 3657 int poll(struct pollfd *filedes, unsigned long nfds, int timeout) |
3649 { | 3658 { |
3650 int i; | 3659 int i; |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3765 rv++; | 3774 rv++; |
3766 } | 3775 } |
3767 } | 3776 } |
3768 PR_ASSERT(rv > 0); | 3777 PR_ASSERT(rv > 0); |
3769 } | 3778 } |
3770 PR_ASSERT(-1 != timeout || rv != 0); | 3779 PR_ASSERT(-1 != timeout || rv != 0); |
3771 | 3780 |
3772 return rv; | 3781 return rv; |
3773 } | 3782 } |
3774 #endif /* _PR_NEED_FAKE_POLL */ | 3783 #endif /* _PR_NEED_FAKE_POLL */ |
OLD | NEW |