CURLOPT_FNMATCH_FUNCTION(3)

πŸŽ€ NAME πŸŽ€

CURLOPT_FNMATCH_FUNCTION(3) β€” from the Library Functions Manual, bestie β€” is literally the wildcard match callback. That's the name, and it's giving very specific callback energy. πŸ’…βœ¨

✨ SYNOPSIS ✨

okay so here's the exact signature, no edits:

#include <curl/curl.h>

int fnmatch_callback(void *ptr,
                     const char *pattern,
                     const char *string);

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_FUNCTION,
                          fnmatch_callback);

🌸 DESCRIPTION 🌸

You pass a pointer to your callback function, and it should match the prototype shown above. Simple? Slay. 🫢

This callback is used for wildcard matching. 🌈

Return these values, okay?

  • CURL_FNMATCHFUNC_MATCH β€” if pattern matches the string.
  • CURL_FNMATCHFUNC_NOMATCH β€” if it does not match.
  • CURL_FNMATCHFUNC_FAIL β€” if an error occurred.
bestie reminder: those are the return values for this callback. Keep the vibe accurate. πŸ’€

πŸ’– DEFAULT πŸ’–

NULL == an internal function for wildcard matching. That's the default, no cap. πŸŽ€

🐟 PROTOCOLS 🐟

This functionality affects ftp only. Like, ftp only, bestie. πŸ¦‹

πŸ”₯ EXAMPLE πŸ”₯

Here's the example from the page, exactly as it appears β€” icon behavior, zero rewrites:

extern int string_match(const char *s1, const char *s2);

struct local_stuff {
  void *custom;
};
static int my_fnmatch(void *clientp,
                      const char *pattern, const char *string)
{
  struct local_stuff *data = clientp;
  printf("my pointer: %p\n", data->custom);
  if(string_match(pattern, string))
    return CURL_FNMATCHFUNC_MATCH;
  else
    return CURL_FNMATCHFUNC_NOMATCH;
}

int main(void)
{
  struct local_stuff local_data;
  CURL *curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/file*");
    curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
    curl_easy_setopt(curl, CURLOPT_FNMATCH_FUNCTION, my_fnmatch);
    curl_easy_setopt(curl, CURLOPT_FNMATCH_DATA, &local_data);
    curl_easy_perform(curl);
  }
}

🌟 AVAILABILITY 🌟

Added in curl 7.21.0. Vintage but still iconic. ⭐

πŸ‘‘ RETURN VALUE πŸ‘‘

curl_easy_setopt(3) returns a CURLcode indicating success or error.

CURLE_OK (0) means everything was OK, non-zero means an error occurred, see libcurl-errors(3). Periodt. πŸ’–

πŸ¦‹ SEE ALSO πŸ¦‹

mwah πŸ’‹ β€” source/version libcurl, date 2026-10-12. Now go match those wildcards like the main character you are! 🫢

πŸ“¦ where this page comes from