---
name: "lc_memsync"
section: "3"
platform: "linux"
package: "liblibrecast-dev"
version: "0.9.1-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/lc_memsync"
---

# lc\_memsync(3)

synchronize two memory areas

## NAME

lc\_memsync - synchronize two memory areas

## LIBRARY

Librecast library (*liblibrecast*, *-llibrecast*)

## SYNOPSIS

```
#include <librecast/sync.h>
```

**int lc\_memsync(void** *\*dst***, void** *\*src***, const size\_t** *n***, q\_t** *\*q*                **lc\_stat\_t** *\*stats***, lc\_sync\_options\_t** *\*opt***, int** *flags***);**

Compile and link with *-llibrecast*.

## DESCRIPTION

The **lc\_memsync** function synchronizes two non-overlapping memory areas of size *n* bytes using merkle tree comparison, overwriting *dst* with bytes from *src*.

If *q* is not NULL, it must point to a queue *q\_t* structure previously initialized with [**q\_init**(3)](/q_init/3.md). This queue will have jobs enqueued to build the trees. This is normally used in conjunction with a threadpool created with [**q\_pool\_create**(3)](/q_pool_create/3.md) with threads all calling [**q\_job\_seek**(3)](/q_job_seek/3.md).

If *q* is NULL, the creation and destruction of a queue and threadpool will be handled automatically.

If *stats* is not NULL, transfer statistics will be returned in this structure.

*opt* is not used, at present, and must be NULL for compatibility with future versions.

*flags* is not used, at present, and must be zero for compatibility with future versions.

## RETURN VALUE

**lc\_memsync**() returns zero on success. On error, -1 is returned, and *errno* is set to indicate the error.

## ERRORS

- **EINVAL**

  Invalid argument.

**ENOMEM** Not enough space/cannot allocate memory (POSIX.1-2001).

## SEE ALSO

[**q\_init**(3)](/q_init/3.md), [**q\_free**(3)](/q_free/3.md), [**q\_pool\_create**(3)](/q_pool_create/3.md)
