ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.xs
(Generate patch)

Comparing IO-AIO/AIO.xs (file contents):
Revision 1.167 by root, Sun May 9 20:49:52 2010 UTC vs.
Revision 1.170 by root, Wed Aug 4 16:09:36 2010 UTC

140#endif 140#endif
141#ifndef POSIX_FADV_DONTNEED 141#ifndef POSIX_FADV_DONTNEED
142# define POSIX_FADV_DONTNEED 0 142# define POSIX_FADV_DONTNEED 0
143#endif 143#endif
144 144
145#if _XOPEN_SOURCE < 600 || NO_FADVISE
146# define posix_fadvise(a,b,c,d) errno = ENOSYS /* also return ENOSYS */
147#endif
148
149#ifndef POSIX_MADV_NORMAL
150# define POSIX_MADV_NORMAL 0
151# define NO_MADVISE 1
152#endif
153#ifndef POSIX_MADV_SEQUENTIAL
154# define POSIX_MADV_SEQUENTIAL 0
155#endif
156#ifndef POSIX_MADV_RANDOM
157# define POSIX_MADV_RANDOM 0
158#endif
159#ifndef POSIX_MADV_WILLNEED
160# define POSIX_MADV_WILLNEED 0
161#endif
162#ifndef POSIX_MADV_DONTNEED
163# define POSIX_MADV_DONTNEED 0
164#endif
165
166#if _XOPEN_SOURCE < 600 || NO_MADVISE
167# define posix_madvise(a,b,c) errno = ENOSYS /* also return ENOSYS */
168#endif
169
145#ifndef ST_NODEV 170#ifndef ST_NODEV
146# define ST_NODEV 0 171# define ST_NODEV 0
147#endif 172#endif
148#ifndef ST_NOEXEC 173#ifndef ST_NOEXEC
149# define ST_NOEXEC 0 174# define ST_NOEXEC 0
620 errno = old_errno; 645 errno = old_errno;
621 646
622 mg->mg_obj = 0; /* just in case */ 647 mg->mg_obj = 0; /* just in case */
623 648
624 SvREADONLY_off (sv); 649 SvREADONLY_off (sv);
650
651 if (SvPVX (sv) != mg->mg_ptr)
652 croak ("ERROR: IO::AIO::mmap-mapped scalar changed location, detected");
653
625 SvCUR_set (sv, 0); 654 SvCUR_set (sv, 0);
626 SvLEN_set (sv, 0);
627 SvPVX (sv) = 0; 655 SvPVX (sv) = 0;
628 SvOK_off (sv); 656 SvOK_off (sv);
629 657
630 return 0; 658 return 0;
631} 659}
696 const_niv (FADV_RANDOM , POSIX_FADV_RANDOM) 724 const_niv (FADV_RANDOM , POSIX_FADV_RANDOM)
697 const_niv (FADV_NOREUSE , POSIX_FADV_NOREUSE) 725 const_niv (FADV_NOREUSE , POSIX_FADV_NOREUSE)
698 const_niv (FADV_WILLNEED , POSIX_FADV_WILLNEED) 726 const_niv (FADV_WILLNEED , POSIX_FADV_WILLNEED)
699 const_niv (FADV_DONTNEED , POSIX_FADV_DONTNEED) 727 const_niv (FADV_DONTNEED , POSIX_FADV_DONTNEED)
700 728
729 const_niv (MADV_NORMAL , POSIX_MADV_NORMAL)
730 const_niv (MADV_SEQUENTIAL, POSIX_MADV_SEQUENTIAL)
731 const_niv (MADV_RANDOM , POSIX_MADV_RANDOM)
732 const_niv (MADV_WILLNEED , POSIX_MADV_WILLNEED)
733 const_niv (MADV_DONTNEED , POSIX_MADV_DONTNEED)
734
701 const_iv (ST_RDONLY) 735 const_iv (ST_RDONLY)
702 const_iv (ST_NOSUID) 736 const_iv (ST_NOSUID)
703 const_iv (ST_NODEV) 737 const_iv (ST_NODEV)
704 const_iv (ST_NOEXEC) 738 const_iv (ST_NOEXEC)
705 const_iv (ST_SYNCHRONOUS) 739 const_iv (ST_SYNCHRONOUS)
1359 1393
1360int 1394int
1361fadvise (aio_rfd fh, off_t offset, off_t length, IV advice) 1395fadvise (aio_rfd fh, off_t offset, off_t length, IV advice)
1362 PROTOTYPE: $$$$ 1396 PROTOTYPE: $$$$
1363 CODE: 1397 CODE:
1364#if _XOPEN_SOURCE >= 600 && !NO_FADVISE
1365 RETVAL = posix_fadvise (fh, offset, length, advice); 1398 RETVAL = posix_fadvise (fh, offset, length, advice);
1366#else
1367 RETVAL = errno = ENOSYS; /* yes, this is actually correct */
1368#endif
1369 OUTPUT: 1399 OUTPUT:
1370 RETVAL 1400 RETVAL
1371 1401
1372ssize_t 1402ssize_t
1373sendfile (aio_wfd ofh, aio_rfd ifh, off_t offset, size_t count) 1403sendfile (aio_wfd ofh, aio_rfd ifh, off_t offset, size_t count)
1386 int fd = SvOK (fh) ? s_fileno_croak (fh, flags & PROT_WRITE) : -1; 1416 int fd = SvOK (fh) ? s_fileno_croak (fh, flags & PROT_WRITE) : -1;
1387 void *addr = (void *)mmap (0, length, prot, flags, fd, offset); 1417 void *addr = (void *)mmap (0, length, prot, flags, fd, offset);
1388 if (addr == (void *)-1) 1418 if (addr == (void *)-1)
1389 XSRETURN_NO; 1419 XSRETURN_NO;
1390 1420
1421 sv_force_normal (scalar);
1422
1391 /* we store the length in mg_obj, as namlen is I32 :/ */ 1423 /* we store the length in mg_obj, as namlen is I32 :/ */
1392 sv_magicext (scalar, 0, MMAP_MAGIC, &mmap_vtbl, (char *)addr, 0) 1424 sv_magicext (scalar, 0, MMAP_MAGIC, &mmap_vtbl, (char *)addr, 0)
1393 ->mg_obj = (SV *)length; 1425 ->mg_obj = (SV *)length;
1394 1426
1395 SvUPGRADE (scalar, SVt_PV); /* nop... */ 1427 SvUPGRADE (scalar, SVt_PV); /* nop... */
1428
1396 if (!(prot & PROT_WRITE)) 1429 if (!(prot & PROT_WRITE))
1397 SvREADONLY_on (scalar); 1430 SvREADONLY_on (scalar);
1431
1432 if (SvLEN (scalar))
1433 Safefree (SvPVX (scalar));
1398 1434
1399 SvPVX (scalar) = (char *)addr; 1435 SvPVX (scalar) = (char *)addr;
1400 SvCUR_set (scalar, length); 1436 SvCUR_set (scalar, length);
1401 SvLEN_set (scalar, 0); 1437 SvLEN_set (scalar, 0);
1402 SvPOK_only (scalar); 1438 SvPOK_only (scalar);
1407void 1443void
1408munmap (SV *scalar) 1444munmap (SV *scalar)
1409 PROTOTYPE: $ 1445 PROTOTYPE: $
1410 CODE: 1446 CODE:
1411 sv_unmagic (scalar, MMAP_MAGIC); 1447 sv_unmagic (scalar, MMAP_MAGIC);
1448
1449int
1450madvise (SV *scalar, off_t offset, off_t length, IV advice)
1451 PROTOTYPE: $$$$
1452 CODE:
1453{
1454 char *addr = SvPV_nolen (scalar) + offset;
1455
1456 if (!SvOK (ST (2)))
1457 length = SvCUR (scalar) - offset;
1458
1459 if (addr >= SvEND (scalar) || length <= 0)
1460 XSRETURN_EMPTY;
1461
1462 RETVAL = posix_madvise (addr, length, advice);
1463}
1464 OUTPUT:
1465 RETVAL
1412 1466
1413int 1467int
1414mlockall (int flags) 1468mlockall (int flags)
1415 PROTOTYPE: $ 1469 PROTOTYPE: $
1416 CODE: 1470 CODE:

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines