#386 M68K/BCPL: memcpy off-by-one bug

m68k-amiga
closed-fixed
Shell/DOS (109)
5
2012-02-29
2012-02-29
Mark K
No

I compared the Kickstart 1.3 BCPL "memcpy" code with that in AROS. As with AROS getvec and clearvec (see bugs 3494128 and 3494752), there's an off-by-one bug with memcpy too; the AROS version copies one fewer longwords than it should.

The proper name for memcpy is copyvec. From the Tripos Kermit source code at http://ftp.nluug.nl/pub/networking/kermit/c/tripos.bcp:
AND copyvec(b1,b2,u) BE
FOR i = 0 TO u DO b2!i := b1!i

So Tripos copyvec copies "length+1" longwords. The Kickstart memcpy/copyvec code also does that. The AROS version only copies "length" longwords.

Some other info about the Kickstart implementation:
- It returns immediately if the length argument in D3.L is negative (so it returns with the source BPTR in D1).
- It happens to return a pointer to the source (D1 on entry shifted left by 2) in D1, but that's probably not required (the function is void).
- It uses a DBF loop, so only the low word of the length argument is used. Again, that's probably not important.

Discussion

  • Toni Wilen

    Toni Wilen - 2012-02-29

    Fixed.

     
  • Toni Wilen

    Toni Wilen - 2012-02-29
    • assigned_to: nobody --> twilen
    • status: open --> closed-fixed
     

Log in to post a comment.

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks