@@ -71,22 +71,43 @@ bool stdin_upload(const char *uploadfile)
71
71
!strcmp (uploadfile , "." )) ? TRUE : FALSE;
72
72
}
73
73
74
+ /* Convert a CURLUcode into a CURLcode */
75
+ CURLcode urlerr_cvt (CURLUcode ucode )
76
+ {
77
+ if (ucode == CURLUE_OUT_OF_MEMORY )
78
+ return CURLE_OUT_OF_MEMORY ;
79
+ else if (ucode == CURLUE_UNSUPPORTED_SCHEME )
80
+ return CURLE_UNSUPPORTED_PROTOCOL ;
81
+ else if (ucode == CURLUE_LACKS_IDN )
82
+ return CURLE_NOT_BUILT_IN ;
83
+ else if (ucode == CURLUE_BAD_HANDLE )
84
+ return CURLE_BAD_FUNCTION_ARGUMENT ;
85
+ return CURLE_URL_MALFORMAT ;
86
+ }
87
+
74
88
/*
75
89
* Adds the file name to the URL if it doesn't already have one.
76
90
* url will be freed before return if the returned pointer is different
77
91
*/
78
92
CURLcode add_file_name_to_url (CURL * curl , char * * inurlp , const char * filename )
79
93
{
80
- CURLcode result = CURLE_OUT_OF_MEMORY ;
94
+ CURLcode result = CURLE_URL_MALFORMAT ;
95
+ CURLUcode uerr ;
81
96
CURLU * uh = curl_url ();
82
97
char * path = NULL ;
83
98
if (uh ) {
84
99
char * ptr ;
85
- if (curl_url_set (uh , CURLUPART_URL , * inurlp ,
86
- CURLU_GUESS_SCHEME |CURLU_NON_SUPPORT_SCHEME ))
100
+ uerr = curl_url_set (uh , CURLUPART_URL , * inurlp ,
101
+ CURLU_GUESS_SCHEME |CURLU_NON_SUPPORT_SCHEME );
102
+ if (uerr ) {
103
+ result = urlerr_cvt (uerr );
87
104
goto fail ;
88
- if (curl_url_get (uh , CURLUPART_PATH , & path , 0 ))
105
+ }
106
+ uerr = curl_url_get (uh , CURLUPART_PATH , & path , 0 );
107
+ if (uerr ) {
108
+ result = urlerr_cvt (uerr );
89
109
goto fail ;
110
+ }
90
111
91
112
ptr = strrchr (path , '/' );
92
113
if (!ptr || !* ++ ptr ) {
@@ -111,7 +132,6 @@ CURLcode add_file_name_to_url(CURL *curl, char **inurlp, const char *filename)
111
132
if (encfile ) {
112
133
char * newpath ;
113
134
char * newurl ;
114
- CURLUcode uerr ;
115
135
if (ptr )
116
136
/* there is a trailing slash on the path */
117
137
newpath = aprintf ("%s%s" , path , encfile );
@@ -125,10 +145,15 @@ CURLcode add_file_name_to_url(CURL *curl, char **inurlp, const char *filename)
125
145
goto fail ;
126
146
uerr = curl_url_set (uh , CURLUPART_PATH , newpath , 0 );
127
147
free (newpath );
128
- if (uerr )
148
+ if (uerr ) {
149
+ result = urlerr_cvt (uerr );
129
150
goto fail ;
130
- if (curl_url_get (uh , CURLUPART_URL , & newurl , CURLU_DEFAULT_SCHEME ))
151
+ }
152
+ uerr = curl_url_get (uh , CURLUPART_URL , & newurl , CURLU_DEFAULT_SCHEME );
153
+ if (uerr ) {
154
+ result = urlerr_cvt (uerr );
131
155
goto fail ;
156
+ }
132
157
free (* inurlp );
133
158
* inurlp = newurl ;
134
159
result = CURLE_OK ;
@@ -153,32 +178,35 @@ CURLcode get_url_file_name(char **filename, const char *url)
153
178
const char * pc , * pc2 ;
154
179
CURLU * uh = curl_url ();
155
180
char * path = NULL ;
181
+ CURLUcode uerr ;
156
182
157
183
if (!uh )
158
184
return CURLE_OUT_OF_MEMORY ;
159
185
160
186
* filename = NULL ;
161
187
162
- if (!curl_url_set (uh , CURLUPART_URL , url , CURLU_GUESS_SCHEME ) &&
163
- !curl_url_get (uh , CURLUPART_PATH , & path , 0 )) {
164
- curl_url_cleanup (uh );
188
+ uerr = curl_url_set (uh , CURLUPART_URL , url , CURLU_GUESS_SCHEME );
189
+ if (!uerr ) {
190
+ uerr = curl_url_get (uh , CURLUPART_PATH , & path , 0 );
191
+ if (!uerr ) {
192
+ curl_url_cleanup (uh );
165
193
166
- pc = strrchr (path , '/' );
167
- pc2 = strrchr (pc ? pc + 1 : path , '\\' );
168
- if (pc2 )
169
- pc = pc2 ;
194
+ pc = strrchr (path , '/' );
195
+ pc2 = strrchr (pc ? pc + 1 : path , '\\' );
196
+ if (pc2 )
197
+ pc = pc2 ;
170
198
171
- if (pc )
172
- /* duplicate the string beyond the slash */
173
- pc ++ ;
174
- else
175
- /* no slash => empty string */
176
- pc = "" ;
199
+ if (pc )
200
+ /* duplicate the string beyond the slash */
201
+ pc ++ ;
202
+ else
203
+ /* no slash => empty string */
204
+ pc = "" ;
177
205
178
- * filename = strdup (pc );
179
- curl_free (path );
180
- if (!* filename )
181
- return CURLE_OUT_OF_MEMORY ;
206
+ * filename = strdup (pc );
207
+ curl_free (path );
208
+ if (!* filename )
209
+ return CURLE_OUT_OF_MEMORY ;
182
210
183
211
#if defined(MSDOS ) || defined(WIN32 )
184
212
{
@@ -191,25 +219,26 @@ CURLcode get_url_file_name(char **filename, const char *url)
191
219
}
192
220
#endif /* MSDOS || WIN32 */
193
221
194
- /* in case we built debug enabled, we allow an environment variable
195
- * named CURL_TESTDIR to prefix the given file name to put it into a
196
- * specific directory
197
- */
222
+ /* in case we built debug enabled, we allow an environment variable
223
+ * named CURL_TESTDIR to prefix the given file name to put it into a
224
+ * specific directory
225
+ */
198
226
#ifdef DEBUGBUILD
199
- {
200
- char * tdir = curlx_getenv ("CURL_TESTDIR" );
201
- if (tdir ) {
202
- char * alt = aprintf ("%s/%s" , tdir , * filename );
203
- Curl_safefree (* filename );
204
- * filename = alt ;
205
- curl_free (tdir );
206
- if (!* filename )
207
- return CURLE_OUT_OF_MEMORY ;
227
+ {
228
+ char * tdir = curlx_getenv ("CURL_TESTDIR" );
229
+ if (tdir ) {
230
+ char * alt = aprintf ("%s/%s" , tdir , * filename );
231
+ Curl_safefree (* filename );
232
+ * filename = alt ;
233
+ curl_free (tdir );
234
+ if (!* filename )
235
+ return CURLE_OUT_OF_MEMORY ;
236
+ }
208
237
}
209
- }
210
238
#endif
211
- return CURLE_OK ;
239
+ return CURLE_OK ;
240
+ }
212
241
}
213
242
curl_url_cleanup (uh );
214
- return CURLE_URL_MALFORMAT ;
243
+ return urlerr_cvt ( uerr ) ;
215
244
}
0 commit comments