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.206 by root, Tue Oct 4 18:22:37 2011 UTC vs.
Revision 1.209 by root, Sun Apr 1 17:46:02 2012 UTC

62 #undef dup 62 #undef dup
63 #undef dup2 63 #undef dup2
64 #undef abort 64 #undef abort
65 #undef pipe 65 #undef pipe
66 66
67 #define EIO_STRUCT_STAT struct _stati64
68 #define EIO_STRUCT_STATI64
69
67#else 70#else
68 71
69 #include <sys/time.h> 72 #include <sys/time.h>
70 #include <sys/select.h> 73 #include <sys/select.h>
71 #include <unistd.h> 74 #include <unistd.h>
72 #include <utime.h> 75 #include <utime.h>
73 #include <signal.h> 76 #include <signal.h>
74 77
75#endif
76
77#define EIO_STRUCT_STAT Stat_t 78 #define EIO_STRUCT_STAT Stat_t
79
80#endif
78 81
79/* use NV for 32 bit perls as it allows larger offsets */ 82/* use NV for 32 bit perls as it allows larger offsets */
80#if IVSIZE >= 8 83#if IVSIZE >= 8
81# define VAL64 IV 84# define VAL64 IV
82# define SvVAL64 SvIV 85# define SvVAL64 SvIV
633 if (!(PL_laststatval = req->result)) 636 if (!(PL_laststatval = req->result))
634 /* if compilation fails here then perl's Stat_t is not struct _stati64 */ 637 /* if compilation fails here then perl's Stat_t is not struct _stati64 */
635 PL_statcache = *(EIO_STRUCT_STAT *)(req->ptr2); 638 PL_statcache = *(EIO_STRUCT_STAT *)(req->ptr2);
636 639
637 PUSHs (sv_result); 640 PUSHs (sv_result);
641 break;
642
643 case EIO_SEEK:
644 PUSHs (req->result ? sv_result : sv_2mortal (newSVval64 (req->offs)));
638 break; 645 break;
639 646
640 case EIO_READ: 647 case EIO_READ:
641 { 648 {
642 SvCUR_set (req->sv2, req->stroffset + (req->result > 0 ? req->result : 0)); 649 SvCUR_set (req->sv2, req->stroffset + (req->result > 0 ? req->result : 0));
999 const_iv (MAP_LOCKED) 1006 const_iv (MAP_LOCKED)
1000 const_iv (MAP_NORESERVE) 1007 const_iv (MAP_NORESERVE)
1001 const_iv (MAP_POPULATE) 1008 const_iv (MAP_POPULATE)
1002 const_iv (MAP_NONBLOCK) 1009 const_iv (MAP_NONBLOCK)
1003 1010
1011 const_eio (SEEK_SET)
1012 const_eio (SEEK_CUR)
1013 const_eio (SEEK_END)
1014
1004 const_eio (MCL_FUTURE) 1015 const_eio (MCL_FUTURE)
1005 const_eio (MCL_CURRENT) 1016 const_eio (MCL_CURRENT)
1006 1017
1007 const_eio (MS_ASYNC) 1018 const_eio (MS_ASYNC)
1008 const_eio (MS_INVALIDATE) 1019 const_eio (MS_INVALIDATE)
1130 1141
1131 req->type = ix; 1142 req->type = ix;
1132 req->sv1 = newSVsv (fh); 1143 req->sv1 = newSVsv (fh);
1133 req->int1 = fd; 1144 req->int1 = fd;
1134 1145
1135 REQ_SEND (req); 1146 REQ_SEND;
1136} 1147}
1137 1148
1138void 1149void
1139aio_sync_file_range (SV *fh, off_t offset, size_t nbytes, UV flags, SV *callback=&PL_sv_undef) 1150aio_sync_file_range (SV *fh, off_t offset, size_t nbytes, UV flags, SV *callback=&PL_sv_undef)
1140 PPCODE: 1151 PPCODE:
1147 req->int1 = fd; 1158 req->int1 = fd;
1148 req->offs = offset; 1159 req->offs = offset;
1149 req->size = nbytes; 1160 req->size = nbytes;
1150 req->int2 = flags; 1161 req->int2 = flags;
1151 1162
1152 REQ_SEND (req); 1163 REQ_SEND;
1153} 1164}
1154 1165
1155void 1166void
1156aio_fallocate (SV *fh, int mode, off_t offset, size_t len, SV *callback=&PL_sv_undef) 1167aio_fallocate (SV *fh, int mode, off_t offset, size_t len, SV *callback=&PL_sv_undef)
1157 PPCODE: 1168 PPCODE:
1164 req->int1 = fd; 1175 req->int1 = fd;
1165 req->int2 = mode; 1176 req->int2 = mode;
1166 req->offs = offset; 1177 req->offs = offset;
1167 req->size = len; 1178 req->size = len;
1168 1179
1169 REQ_SEND (req); 1180 REQ_SEND;
1170} 1181}
1171 1182
1172void 1183void
1173aio_close (SV *fh, SV *callback=&PL_sv_undef) 1184aio_close (SV *fh, SV *callback=&PL_sv_undef)
1174 PPCODE: 1185 PPCODE:
1198 req->type = EIO_DUP2; 1209 req->type = EIO_DUP2;
1199 req->int1 = close_fd; 1210 req->int1 = close_fd;
1200 req->sv2 = newSVsv (fh); 1211 req->sv2 = newSVsv (fh);
1201 req->int2 = fd; 1212 req->int2 = fd;
1202 1213
1203 REQ_SEND (req); 1214 REQ_SEND;
1215}
1216
1217void
1218aio_seek (SV *fh, SV *offset, int whence, SV *callback=&PL_sv_undef)
1219 PPCODE:
1220{
1221 STRLEN svlen;
1222 int fd = s_fileno_croak (fh, 0);
1223 dREQ;
1224
1225 req->type = EIO_SEEK;
1226 req->sv1 = newSVsv (fh);
1227 req->int1 = fd;
1228 req->offs = SvVAL64 (offset);
1229 req->int2 = whence;
1230
1231 REQ_SEND;
1204} 1232}
1205 1233
1206void 1234void
1207aio_read (SV *fh, SV *offset, SV *length, SV8 *data, IV dataoffset, SV *callback=&PL_sv_undef) 1235aio_read (SV *fh, SV *offset, SV *length, SV8 *data, IV dataoffset, SV *callback=&PL_sv_undef)
1208 ALIAS: 1236 ALIAS:
1439 aio_link = EIO_LINK 1467 aio_link = EIO_LINK
1440 aio_symlink = EIO_SYMLINK 1468 aio_symlink = EIO_SYMLINK
1441 aio_rename = EIO_RENAME 1469 aio_rename = EIO_RENAME
1442 PPCODE: 1470 PPCODE:
1443{ 1471{
1472 eio_wd wd2 = 0;
1444 dREQ; 1473 dREQ;
1445 eio_wd wd2 = 0;
1446 1474
1447 req->type = ix; 1475 req->type = ix;
1448 req_set_path1 (req, oldpath); 1476 req_set_path1 (req, oldpath);
1449 req_set_path (req, newpath, &req->sv2, &req->sv4, &wd2, &req->ptr2); 1477 req_set_path (req, newpath, &req->sv2, &req->sv4, &wd2, &req->ptr2);
1450 req->int3 = (long)wd2; 1478 req->int3 = (long)wd2;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines