The R Project SVN R

Rev

Rev 76870 | Rev 77916 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 76870 Rev 77224
Line 91... Line 91...
91
    /* else look for letter-code ending : */
91
    /* else look for letter-code ending : */
92
    if(R_Verbose)
92
    if(R_Verbose)
93
	REprintf("R_Decode2Long(): v=%ld\n", v);
93
	REprintf("R_Decode2Long(): v=%ld\n", v);
94
    // NOTE: currently, positive *ierr are not differentiated in the callers:
94
    // NOTE: currently, positive *ierr are not differentiated in the callers:
95
    if(p[0] == 'G') {
95
    if(p[0] == 'G') {
96
	if((Giga * (double)v) > R_SIZE_T_MAX) { *ierr = 4; return(v); }
96
	if((Giga * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 4; return(v); }
97
	return (R_size_t) Giga * v;
97
	return (R_size_t) Giga * v;
98
    }
98
    }
99
    else if(p[0] == 'M') {
99
    else if(p[0] == 'M') {
100
	if((Mega * (double)v) > R_SIZE_T_MAX) { *ierr = 1; return(v); }
100
	if((Mega * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 1; return(v); }
101
	return (R_size_t) Mega * v;
101
	return (R_size_t) Mega * v;
102
    }
102
    }
103
    else if(p[0] == 'K') {
103
    else if(p[0] == 'K') {
104
	if((1024 * (double)v) > R_SIZE_T_MAX) { *ierr = 2; return(v); }
104
	if((1024 * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 2; return(v); }
105
	return (1024*v);
105
	return (1024*v);
106
    }
106
    }
107
    else if(p[0] == 'k') {
107
    else if(p[0] == 'k') {
108
	if((1000 * (double)v) > R_SIZE_T_MAX) { *ierr = 3; return(v); }
108
	if((1000 * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 3; return(v); }
109
	return (1000*v);
109
	return (1000*v);
110
    }
110
    }
111
    else {
111
    else {
112
	*ierr = -1;
112
	*ierr = -1;
113
	return(v);
113
	return(v);
Line 616... Line 616...
616
       one byte for an upper-plane Unicode point output as ten bytes,
616
       one byte for an upper-plane Unicode point output as ten bytes,
617
       but I doubt that such an MBCS exists: two bytes is plausible).
617
       but I doubt that such an MBCS exists: two bytes is plausible).
618
 
618
 
619
       +2 allows for quotes, +6 for UTF_8 escapes.
619
       +2 allows for quotes, +6 for UTF_8 escapes.
620
     */
620
     */
621
    if(5.*cnt + 8 > SIZE_MAX)
621
    if(5.*cnt + 8 > (double) SIZE_MAX)
622
	error(_("too large string (nchar=%d) => 5*nchar + 8 > SIZE_MAX"));
622
	error(_("too large string (nchar=%d) => 5*nchar + 8 > SIZE_MAX"));
623
    size_t q_len = 5*(size_t)cnt + 8;
623
    size_t q_len = 5*(size_t)cnt + 8;
624
    if(q_len < w) q_len = (size_t) w;
624
    if(q_len < w) q_len = (size_t) w;
625
    q = R_AllocStringBuffer(q_len, buffer);
625
    q = R_AllocStringBuffer(q_len, buffer);
626
 
626