---
name: "CURLSHOPT_USERDATA"
section: "3"
platform: "linux"
package: "curl"
version: "8.23.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/CURLSHOPT_USERDATA"
---

# CURLSHOPT\_USERDATA(3)

pointer passed to the lock and unlock mutex callbacks

## NAME

CURLSHOPT\_USERDATA - pointer passed to the lock and unlock mutex callbacks

## SYNOPSIS

```
#include <curl/curl.h>
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHOPT_USERDATA, void *clientp);
```

## DESCRIPTION

The *clientp* parameter is held verbatim by libcurl and is passed on as the *clientp* argument to the callbacks set with *[CURLSHOPT\_LOCKFUNC(3)](/CURLSHOPT_LOCKFUNC/3.md)* and *[CURLSHOPT\_UNLOCKFUNC(3)](/CURLSHOPT_UNLOCKFUNC/3.md)*.

## PROTOCOLS

This functionality affects all supported protocols

## EXAMPLE

```
struct secrets {
  void *custom;
};
int main(void)
{
  CURLSHcode sh;
  struct secrets private_stuff;
  CURLSH *share = curl_share_init();
  sh = curl_share_setopt(share, CURLSHOPT_USERDATA, &private_stuff);
  if(sh)
    printf("Error: %s\n", curl_share_strerror(sh));
}
```

## AVAILABILITY

Added in curl 7.10.3

## RETURN VALUE

CURLSHE\_OK (zero) means that the option was set properly, non-zero means an error occurred. See *[libcurl-errors(3)](/libcurl-errors/3.md)* for the full list with descriptions.

## SEE ALSO

[**CURLSHOPT\_LOCKFUNC**(3)](/CURLSHOPT_LOCKFUNC/3.md), [**curl\_share\_cleanup**(3)](/curl_share_cleanup/3.md), [**curl\_share\_init**(3)](/curl_share_init/3.md), [**curl\_share\_setopt**(3)](/curl_share_setopt/3.md)
