1*6236dae4SAndroid Build Coastguard Worker--- 2*6236dae4SAndroid Build Coastguard Workerc: Copyright (C) Daniel Stenberg, <[email protected]>, et al. 3*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl 4*6236dae4SAndroid Build Coastguard WorkerTitle: CURLOPT_ERRORBUFFER 5*6236dae4SAndroid Build Coastguard WorkerSection: 3 6*6236dae4SAndroid Build Coastguard WorkerSource: libcurl 7*6236dae4SAndroid Build Coastguard WorkerSee-also: 8*6236dae4SAndroid Build Coastguard Worker - CURLOPT_DEBUGFUNCTION (3) 9*6236dae4SAndroid Build Coastguard Worker - CURLOPT_VERBOSE (3) 10*6236dae4SAndroid Build Coastguard Worker - curl_easy_strerror (3) 11*6236dae4SAndroid Build Coastguard Worker - curl_multi_strerror (3) 12*6236dae4SAndroid Build Coastguard Worker - curl_share_strerror (3) 13*6236dae4SAndroid Build Coastguard Worker - curl_url_strerror (3) 14*6236dae4SAndroid Build Coastguard WorkerProtocol: 15*6236dae4SAndroid Build Coastguard Worker - All 16*6236dae4SAndroid Build Coastguard WorkerAdded-in: 7.1 17*6236dae4SAndroid Build Coastguard Worker--- 18*6236dae4SAndroid Build Coastguard Worker 19*6236dae4SAndroid Build Coastguard Worker# NAME 20*6236dae4SAndroid Build Coastguard Worker 21*6236dae4SAndroid Build Coastguard WorkerCURLOPT_ERRORBUFFER - error buffer for error messages 22*6236dae4SAndroid Build Coastguard Worker 23*6236dae4SAndroid Build Coastguard Worker# SYNOPSIS 24*6236dae4SAndroid Build Coastguard Worker 25*6236dae4SAndroid Build Coastguard Worker~~~c 26*6236dae4SAndroid Build Coastguard Worker#include <curl/curl.h> 27*6236dae4SAndroid Build Coastguard Worker 28*6236dae4SAndroid Build Coastguard WorkerCURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf); 29*6236dae4SAndroid Build Coastguard Worker~~~ 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Worker# DESCRIPTION 32*6236dae4SAndroid Build Coastguard Worker 33*6236dae4SAndroid Build Coastguard WorkerPass a char pointer to a buffer that libcurl may use to store human readable 34*6236dae4SAndroid Build Coastguard Workererror messages on failures or problems. This may be more helpful than just the 35*6236dae4SAndroid Build Coastguard Workerreturn code from curl_easy_perform(3) and related functions. The buffer must 36*6236dae4SAndroid Build Coastguard Workerbe at least **CURL_ERROR_SIZE** bytes big. 37*6236dae4SAndroid Build Coastguard Worker 38*6236dae4SAndroid Build Coastguard WorkerYou must keep the associated buffer available until libcurl no longer needs 39*6236dae4SAndroid Build Coastguard Workerit. Failing to do so might cause odd behavior or even crashes. libcurl might 40*6236dae4SAndroid Build Coastguard Workerneed it until you call curl_easy_cleanup(3) or you set the same option again 41*6236dae4SAndroid Build Coastguard Workerto use a different pointer. 42*6236dae4SAndroid Build Coastguard Worker 43*6236dae4SAndroid Build Coastguard WorkerDo not rely on the contents of the buffer unless an error code was returned. 44*6236dae4SAndroid Build Coastguard WorkerSince 7.60.0 libcurl initializes the contents of the error buffer to an empty 45*6236dae4SAndroid Build Coastguard Workerstring before performing the transfer. For earlier versions if an error code 46*6236dae4SAndroid Build Coastguard Workerwas returned but there was no error detail then the buffer was untouched. 47*6236dae4SAndroid Build Coastguard Worker 48*6236dae4SAndroid Build Coastguard WorkerConsider CURLOPT_VERBOSE(3) and CURLOPT_DEBUGFUNCTION(3) to better debug and 49*6236dae4SAndroid Build Coastguard Workertrace why errors happen. 50*6236dae4SAndroid Build Coastguard Worker 51*6236dae4SAndroid Build Coastguard WorkerUsing this option multiple times makes the last set pointer override the 52*6236dae4SAndroid Build Coastguard Workerprevious ones. Set it to NULL to disable its use again. 53*6236dae4SAndroid Build Coastguard Worker 54*6236dae4SAndroid Build Coastguard Worker# DEFAULT 55*6236dae4SAndroid Build Coastguard Worker 56*6236dae4SAndroid Build Coastguard WorkerNULL 57*6236dae4SAndroid Build Coastguard Worker 58*6236dae4SAndroid Build Coastguard Worker# %PROTOCOLS% 59*6236dae4SAndroid Build Coastguard Worker 60*6236dae4SAndroid Build Coastguard Worker# EXAMPLE 61*6236dae4SAndroid Build Coastguard Worker 62*6236dae4SAndroid Build Coastguard Worker~~~c 63*6236dae4SAndroid Build Coastguard Worker#include <string.h> /* for strlen() */ 64*6236dae4SAndroid Build Coastguard Workerint main(void) 65*6236dae4SAndroid Build Coastguard Worker{ 66*6236dae4SAndroid Build Coastguard Worker CURL *curl = curl_easy_init(); 67*6236dae4SAndroid Build Coastguard Worker if(curl) { 68*6236dae4SAndroid Build Coastguard Worker CURLcode res; 69*6236dae4SAndroid Build Coastguard Worker char errbuf[CURL_ERROR_SIZE]; 70*6236dae4SAndroid Build Coastguard Worker 71*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); 72*6236dae4SAndroid Build Coastguard Worker 73*6236dae4SAndroid Build Coastguard Worker /* provide a buffer to store errors in */ 74*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); 75*6236dae4SAndroid Build Coastguard Worker 76*6236dae4SAndroid Build Coastguard Worker /* set the error buffer as empty before performing a request */ 77*6236dae4SAndroid Build Coastguard Worker errbuf[0] = 0; 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker /* perform the request */ 80*6236dae4SAndroid Build Coastguard Worker res = curl_easy_perform(curl); 81*6236dae4SAndroid Build Coastguard Worker 82*6236dae4SAndroid Build Coastguard Worker /* if the request did not complete correctly, show the error 83*6236dae4SAndroid Build Coastguard Worker information. if no detailed error information was written to errbuf 84*6236dae4SAndroid Build Coastguard Worker show the more generic information from curl_easy_strerror instead. 85*6236dae4SAndroid Build Coastguard Worker */ 86*6236dae4SAndroid Build Coastguard Worker if(res != CURLE_OK) { 87*6236dae4SAndroid Build Coastguard Worker size_t len = strlen(errbuf); 88*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "\nlibcurl: (%d) ", res); 89*6236dae4SAndroid Build Coastguard Worker if(len) 90*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s%s", errbuf, 91*6236dae4SAndroid Build Coastguard Worker ((errbuf[len - 1] != '\n') ? "\n" : "")); 92*6236dae4SAndroid Build Coastguard Worker else 93*6236dae4SAndroid Build Coastguard Worker fprintf(stderr, "%s\n", curl_easy_strerror(res)); 94*6236dae4SAndroid Build Coastguard Worker } 95*6236dae4SAndroid Build Coastguard Worker } 96*6236dae4SAndroid Build Coastguard Worker} 97*6236dae4SAndroid Build Coastguard Worker~~~ 98*6236dae4SAndroid Build Coastguard Worker 99*6236dae4SAndroid Build Coastguard Worker# %AVAILABILITY% 100*6236dae4SAndroid Build Coastguard Worker 101*6236dae4SAndroid Build Coastguard Worker# RETURN VALUE 102*6236dae4SAndroid Build Coastguard Worker 103*6236dae4SAndroid Build Coastguard WorkerReturns CURLE_OK 104