Skip to content

Instantly share code, notes, and snippets.

@jcoglan
Last active May 6, 2017 16:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jcoglan/04c327c5ab6248bb9158105331c4c2f2 to your computer and use it in GitHub Desktop.
Save jcoglan/04c327c5ab6248bb9158105331c4c2f2 to your computer and use it in GitHub Desktop.

In the files below, a.c is the original version.

Version b.c swaps the order of the functions and makes no other changes.

Version c.c adds a comment to Chunk_copy.

This is what you get if you merge b.c and c.c using Git's default diff algorithm.

int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
{
    if (chunk == NULL) return 0;

<<<<<<<
    size_t length = chunk->length;
=======
    // copy the bytes
    memcpy(dst->data + dst_start, src->data + src_start, n);
>>>>>>>

    return start <= length && n <= length - start;
}

size_t Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
{
    if (!Chunk_bounds_check(src, src_start, n)) return 0;
    if (!Chunk_bounds_check(dst, dst_start, n)) return 0;

    memcpy(dst->data + dst_start, src->data + src_start, n);

    return n;
}
size_t Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
{
if (!Chunk_bounds_check(src, src_start, n)) return 0;
if (!Chunk_bounds_check(dst, dst_start, n)) return 0;
memcpy(dst->data + dst_start, src->data + src_start, n);
return n;
}
int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
{
if (chunk == NULL) return 0;
size_t length = chunk->length;
return start <= length && n <= length - start;
}
int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
{
if (chunk == NULL) return 0;
size_t length = chunk->length;
return start <= length && n <= length - start;
}
size_t Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
{
if (!Chunk_bounds_check(src, src_start, n)) return 0;
if (!Chunk_bounds_check(dst, dst_start, n)) return 0;
memcpy(dst->data + dst_start, src->data + src_start, n);
return n;
}
size_t Chunk_copy(Chunk *src, size_t src_start, Chunk *dst, size_t dst_start, size_t n)
{
if (!Chunk_bounds_check(src, src_start, n)) return 0;
if (!Chunk_bounds_check(dst, dst_start, n)) return 0;
// copy the bytes
memcpy(dst->data + dst_start, src->data + src_start, n);
return n;
}
int Chunk_bounds_check(Chunk *chunk, size_t start, size_t n)
{
if (chunk == NULL) return 0;
size_t length = chunk->length;
return start <= length && n <= length - start;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment