@@ -269,12 +269,14 @@ static void curlCommon(CURL *hnd, int redirect, int verify)
269
269
int Default = 1 ;
270
270
SEXP sua = GetOption1 (install ("HTTPUserAgent" )); // set in utils startup
271
271
if (TYPEOF (sua ) == STRSXP && LENGTH (sua ) == 1 ) {
272
- const char * p = CHAR (STRING_ELT (sua , 0 ));
272
+ const void * vmax = vmaxget ();
273
+ const char * p = translateChar (STRING_ELT (sua , 0 ));
273
274
if (p [0 ] && p [1 ] && p [2 ] && p [0 ] == 'R' && p [1 ] == ' ' && p [2 ] == '(' ) {
274
275
} else {
275
276
Default = 0 ;
276
277
curl_easy_setopt (hnd , CURLOPT_USERAGENT , p );
277
278
}
279
+ vmaxset (vmax );
278
280
}
279
281
if (Default ) {
280
282
char buf [20 ];
@@ -533,6 +535,7 @@ in_do_curlDownload(SEXP call, SEXP op, SEXP args, SEXP rho)
533
535
const char * url , * file , * mode ;
534
536
int quiet , cacheOK ;
535
537
struct curl_slist * headers = NULL ;
538
+ const void * vmax = vmaxget ();
536
539
537
540
scmd = CAR (args ); args = CDR (args );
538
541
if (!isString (scmd ) || length (scmd ) < 1 )
@@ -553,7 +556,7 @@ in_do_curlDownload(SEXP call, SEXP op, SEXP args, SEXP rho)
553
556
smode = CAR (args ); args = CDR (args );
554
557
if (!isString (smode ) || length (smode ) != 1 )
555
558
error (_ ("invalid '%s' argument" ), "mode" );
556
- mode = CHAR (STRING_ELT (smode , 0 ));
559
+ mode = translateChar (STRING_ELT (smode , 0 ));
557
560
cacheOK = asLogical (CAR (args )); args = CDR (args );
558
561
if (cacheOK == NA_LOGICAL )
559
562
error (_ ("invalid '%s' argument" ), "cacheOK" );
@@ -563,7 +566,8 @@ in_do_curlDownload(SEXP call, SEXP op, SEXP args, SEXP rho)
563
566
if (TYPEOF (sheaders ) != NILSXP ) {
564
567
for (int i = 0 ; i < LENGTH (sheaders ); i ++ ) {
565
568
struct curl_slist * tmp =
566
- curl_slist_append (headers , CHAR (STRING_ELT (sheaders , i )));
569
+ curl_slist_append (headers ,
570
+ translateChar (STRING_ELT (sheaders , i )));
567
571
if (!tmp ) {
568
572
if (headers ) curl_slist_free_all (headers );
569
573
error (_ ("out of memory" ));
@@ -604,7 +608,7 @@ in_do_curlDownload(SEXP call, SEXP op, SEXP args, SEXP rho)
604
608
}
605
609
606
610
for (int i = 0 ; i < nurls ; i ++ ) {
607
- url = CHAR (STRING_ELT (scmd , i ));
611
+ url = translateChar (STRING_ELT (scmd , i ));
608
612
hnd [i ] = curl_easy_init ();
609
613
if (!hnd [i ]) {
610
614
n_err += 1 ;
@@ -695,6 +699,7 @@ in_do_curlDownload(SEXP call, SEXP op, SEXP args, SEXP rho)
695
699
if (n_err == nurls ) {
696
700
// no dest files could be opened, so bail out
697
701
curl_multi_cleanup (mhnd );
702
+ vmaxset (vmax );
698
703
return ScalarInteger (1 );
699
704
}
700
705
@@ -791,11 +796,13 @@ in_do_curlDownload(SEXP call, SEXP op, SEXP args, SEXP rho)
791
796
else if (n_err ) warning (_ ("some files were not downloaded" ));
792
797
} else if (n_err ) {
793
798
if (status != 200 )
794
- error (_ ("cannot open URL '%s'" ), CHAR (STRING_ELT (scmd , 0 )));
799
+ error (_ ("cannot open URL '%s'" ),
800
+ translateChar (STRING_ELT (scmd , 0 )));
795
801
else
796
- error (_ ("download from '%s' failed" ), CHAR (STRING_ELT (scmd , 0 )));
802
+ error (_ ("download from '%s' failed" ),
803
+ translateChar (STRING_ELT (scmd , 0 )));
797
804
}
798
-
805
+ vmaxset ( vmax );
799
806
return ScalarInteger (0 );
800
807
#endif
801
808
}
@@ -1052,9 +1059,11 @@ in_newCurlUrl(const char *description, const char * const mode,
1052
1059
/* for Solaris 12.5 */ new = NULL ;
1053
1060
}
1054
1061
ctxt -> headers = NULL ;
1062
+ const void * vmax = vmaxget ();
1055
1063
for (int i = 0 ; i < LENGTH (headers ); i ++ ) {
1056
1064
struct curl_slist * tmp =
1057
- curl_slist_append (ctxt -> headers , CHAR (STRING_ELT (headers , i )));
1065
+ curl_slist_append (ctxt -> headers ,
1066
+ translateChar (STRING_ELT (headers , i )));
1058
1067
if (!tmp ) {
1059
1068
free (new -> description ); free (new -> class ); free (new -> private );
1060
1069
free (new ); curl_slist_free_all (ctxt -> headers );
@@ -1063,6 +1072,7 @@ in_newCurlUrl(const char *description, const char * const mode,
1063
1072
}
1064
1073
ctxt -> headers = tmp ;
1065
1074
}
1075
+ vmaxset (vmax );
1066
1076
return new ;
1067
1077
#else
1068
1078
error (_ ("url(method = \"libcurl\") is not supported on this platform" ));
0 commit comments