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.101 by root, Fri Jun 1 13:25:51 2007 UTC vs.
Revision 1.102 by root, Sun Jun 3 09:44:17 2007 UTC

1421 1421
1422 REQ_SEND (req); 1422 REQ_SEND (req);
1423} 1423}
1424 1424
1425void 1425void
1426aio_read (SV *fh, SV *offset, UV length, SV8 *data, UV dataoffset, SV *callback=&PL_sv_undef) 1426aio_read (SV *fh, SV *offset, SV *length, SV8 *data, IV dataoffset, SV *callback=&PL_sv_undef)
1427 ALIAS: 1427 ALIAS:
1428 aio_read = REQ_READ 1428 aio_read = REQ_READ
1429 aio_write = REQ_WRITE 1429 aio_write = REQ_WRITE
1430 PROTOTYPE: $$$$$;$ 1430 PROTOTYPE: $$$$$;$
1431 PPCODE: 1431 PPCODE:
1432{ 1432{
1433 STRLEN svlen; 1433 STRLEN svlen;
1434 char *svptr = SvPVbyte (data, svlen); 1434 char *svptr = SvPVbyte (data, svlen);
1435 UV len = SvUV (length);
1435 1436
1436 SvUPGRADE (data, SVt_PV); 1437 SvUPGRADE (data, SVt_PV);
1437 SvPOK_on (data); 1438 SvPOK_on (data);
1438 1439
1439 if (dataoffset < 0) 1440 if (dataoffset < 0)
1440 dataoffset += svlen; 1441 dataoffset += svlen;
1441 1442
1442 if (dataoffset < 0 || dataoffset > svlen) 1443 if (dataoffset < 0 || dataoffset > svlen)
1443 croak ("data offset outside of string"); 1444 croak ("dataoffset outside of data scalar");
1444 1445
1445 if (ix == REQ_WRITE) 1446 if (ix == REQ_WRITE)
1446 { 1447 {
1447 /* write: check length and adjust. */ 1448 /* write: check length and adjust. */
1448 if (length < 0 || length + dataoffset > svlen) 1449 if (!SvOK (length) || len + dataoffset > svlen)
1449 length = svlen - dataoffset; 1450 len = svlen - dataoffset;
1450 } 1451 }
1451 else 1452 else
1452 { 1453 {
1453 /* read: grow scalar as necessary */ 1454 /* read: grow scalar as necessary */
1454 svptr = SvGROW (data, length + dataoffset + 1); 1455 svptr = SvGROW (data, len + dataoffset + 1);
1455 } 1456 }
1456 1457
1457 if (length < 0) 1458 if (len < 0)
1458 croak ("length must not be negative"); 1459 croak ("length must not be negative");
1459 1460
1460 { 1461 {
1461 dREQ; 1462 dREQ;
1462 1463
1463 req->type = ix; 1464 req->type = ix;
1464 req->sv1 = newSVsv (fh); 1465 req->sv1 = newSVsv (fh);
1465 req->int1 = PerlIO_fileno (ix == REQ_READ ? IoIFP (sv_2io (fh)) 1466 req->int1 = PerlIO_fileno (ix == REQ_READ ? IoIFP (sv_2io (fh))
1466 : IoOFP (sv_2io (fh))); 1467 : IoOFP (sv_2io (fh)));
1467 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1; 1468 req->offs = SvOK (offset) ? SvVAL64 (offset) : -1;
1468 req->size = length; 1469 req->size = len;
1469 req->sv2 = SvREFCNT_inc (data); 1470 req->sv2 = SvREFCNT_inc (data);
1470 req->ptr1 = (char *)svptr + dataoffset; 1471 req->ptr1 = (char *)svptr + dataoffset;
1471 req->stroffset = dataoffset; 1472 req->stroffset = dataoffset;
1472 1473
1473 if (!SvREADONLY (data)) 1474 if (!SvREADONLY (data))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines