---
name: "curl_formfree"
section: "3"
platform: "macos"
package: "curl"
version: "166.0.0.0.1"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/curl_formfree"
---

# curl\_formfree(3)

free a previously build multipart form post chain

## NAME

curl\_formfree - free a previously build multipart form post chain

## SYNOPSIS

```
#include <curl/curl.h>
void curl_formfree(struct curl_httppost *form);
```

## DESCRIPTION

This function is deprecated. Do not use. See *[curl\_mime\_init(3)](/curl_mime_init/3.md)* instead!

curl\_formfree() is used to clean up data previously built/appended with *[curl\_formadd(3)](/curl_formadd/3.md)*. This must be called when the data has been used, which typically means after *[curl\_easy\_perform(3)](/curl_easy_perform/3.md)* has been called.

The pointer to free is the same pointer you passed to the *[CURLOPT\_HTTPPOST(3)](/CURLOPT_HTTPPOST/3.md)* option, which is the *firstitem* pointer from the *[curl\_formadd(3)](/curl_formadd/3.md)* invoke(s).

**form** is the pointer as returned from a previous call to *[curl\_formadd(3)](/curl_formadd/3.md)* and may be NULL.

Passing in a NULL pointer in *form* makes this function return immediately with no action.

## EXAMPLE

```
int main(void)
{
  CURL *curl = curl_easy_init();
  if(curl) {
    struct curl_httppost *formpost;
    struct curl_httppost *lastptr;
    /* Fill in a file upload field */
    curl_formadd(&formpost,
                 &lastptr,
                 CURLFORM_COPYNAME, "file",
                 CURLFORM_FILE, "nice-image.jpg",
                 CURLFORM_END);
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
    curl_easy_perform(curl);
    /* then cleanup the formpost chain */
    curl_formfree(formpost);
  }
}
```

## AVAILABILITY

Deprecated in 7.56.0.

## RETURN VALUE

None

## SEE ALSO

[**curl\_formadd**(3)](/curl_formadd/3.md), [**curl\_mime\_free**(3)](/curl_mime_free/3.md), [**curl\_mime\_init**(3)](/curl_mime_init/3.md)
