diff options
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 25 | ||||
-rw-r--r-- | libgfortran/intrinsics/args.c | 10 | ||||
-rw-r--r-- | libgfortran/intrinsics/chmod.c | 3 | ||||
-rw-r--r-- | libgfortran/intrinsics/env.c | 3 | ||||
-rw-r--r-- | libgfortran/intrinsics/extends_type_of.c | 2 | ||||
-rw-r--r-- | libgfortran/intrinsics/gerror.c | 2 | ||||
-rw-r--r-- | libgfortran/intrinsics/getlog.c | 3 | ||||
-rw-r--r-- | libgfortran/intrinsics/hostnm.c | 5 | ||||
-rw-r--r-- | libgfortran/intrinsics/string_intrinsics_inc.c | 17 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 18 | ||||
-rw-r--r-- | libgfortran/io/unit.c | 3 | ||||
-rw-r--r-- | libgfortran/io/write.c | 3 | ||||
-rw-r--r-- | libgfortran/libgfortran.h | 2 |
13 files changed, 59 insertions, 37 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 1a68730..20b4221 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,28 @@ +2017-01-13 Janne Blomqvist <jb@gcc.gnu.org> + + PR fortran/78534 + * intrinsics/args.c (getarg_i4): Use gfc_charlen_type. + (get_command_argument_i4): Likewise. + (get_command_i4): Likewise. + * intrinsics/chmod.c (chmod_internal): Likewise. + * intrinsics/env.c (get_environment_variable_i4): Likewise. + * intrinsics/extends_type_of.c (struct vtype): Use size_t for size + member. + * intrinsics/gerror.c (gerror): Use gfc_charlen_type. + * intrinsics/getlog.c (getlog): Likewise. + * intrinsics/hostnm.c (hostnm_0): Likewise. + * intrinsics/string_intrinsics_inc.c (string_len_trim): Rework to + work if gfc_charlen_type is unsigned. + (string_scan): Likewise. + * io/transfer.c (transfer_character): Modify prototype. + (transfer_character_write): Likewise. + (transfer_character_wide): Likewise. + (transfer_character_wide_write): Likewise. + (transfer_array): Typecast to avoid signed-unsigned comparison. + * io/unit.c (is_trim_ok): Use gfc_charlen_type. + * io/write.c (namelist_write): Likewise. + * libgfortran.h (gfc_charlen_type): Change typedef to size_t. + 2017-01-13 Andre Vehreschild <vehre@gcc.gnu.org> PR fortran/70696 diff --git a/libgfortran/intrinsics/args.c b/libgfortran/intrinsics/args.c index c07181f..ded5a35 100644 --- a/libgfortran/intrinsics/args.c +++ b/libgfortran/intrinsics/args.c @@ -37,7 +37,6 @@ void getarg_i4 (GFC_INTEGER_4 *pos, char *val, gfc_charlen_type val_len) { int argc; - int arglen; char **argv; get_args (&argc, &argv); @@ -49,7 +48,7 @@ getarg_i4 (GFC_INTEGER_4 *pos, char *val, gfc_charlen_type val_len) if ((*pos) + 1 <= argc && *pos >=0 ) { - arglen = strlen (argv[*pos]); + gfc_charlen_type arglen = strlen (argv[*pos]); if (arglen > val_len) arglen = val_len; memcpy (val, argv[*pos], arglen); @@ -119,7 +118,8 @@ get_command_argument_i4 (GFC_INTEGER_4 *number, char *value, GFC_INTEGER_4 *length, GFC_INTEGER_4 *status, gfc_charlen_type value_len) { - int argc, arglen = 0, stat_flag = GFC_GC_SUCCESS; + int argc, stat_flag = GFC_GC_SUCCESS; + gfc_charlen_type arglen = 0; char **argv; if (number == NULL ) @@ -195,10 +195,10 @@ void get_command_i4 (char *command, GFC_INTEGER_4 *length, GFC_INTEGER_4 *status, gfc_charlen_type command_len) { - int i, argc, arglen, thisarg; + int i, argc, thisarg; int stat_flag = GFC_GC_SUCCESS; - int tot_len = 0; char **argv; + gfc_charlen_type arglen, tot_len = 0; if (command == NULL && length == NULL && status == NULL) return; /* No need to do anything. */ diff --git a/libgfortran/intrinsics/chmod.c b/libgfortran/intrinsics/chmod.c index d08418d..4e917a1 100644 --- a/libgfortran/intrinsics/chmod.c +++ b/libgfortran/intrinsics/chmod.c @@ -64,7 +64,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see static int chmod_internal (char *file, char *mode, gfc_charlen_type mode_len) { - int i; bool ugo[3]; bool rwxXstugo[9]; int set_mode, part; @@ -104,7 +103,7 @@ chmod_internal (char *file, char *mode, gfc_charlen_type mode_len) honor_umask = false; #endif - for (i = 0; i < mode_len; i++) + for (gfc_charlen_type i = 0; i < mode_len; i++) { if (!continue_clause) { diff --git a/libgfortran/intrinsics/env.c b/libgfortran/intrinsics/env.c index f8e376e..f8e7758 100644 --- a/libgfortran/intrinsics/env.c +++ b/libgfortran/intrinsics/env.c @@ -93,7 +93,8 @@ get_environment_variable_i4 (char *name, char *value, GFC_INTEGER_4 *length, gfc_charlen_type name_len, gfc_charlen_type value_len) { - int stat = GFC_SUCCESS, res_len = 0; + int stat = GFC_SUCCESS; + gfc_charlen_type res_len = 0; char *name_nt; char *res; diff --git a/libgfortran/intrinsics/extends_type_of.c b/libgfortran/intrinsics/extends_type_of.c index 8177e0e..8dc9ef8 100644 --- a/libgfortran/intrinsics/extends_type_of.c +++ b/libgfortran/intrinsics/extends_type_of.c @@ -30,7 +30,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see typedef struct vtype { GFC_INTEGER_4 hash; - GFC_INTEGER_4 size; + size_t size; struct vtype *extends; } vtype; diff --git a/libgfortran/intrinsics/gerror.c b/libgfortran/intrinsics/gerror.c index 34ea1df..51432a4 100644 --- a/libgfortran/intrinsics/gerror.c +++ b/libgfortran/intrinsics/gerror.c @@ -39,7 +39,7 @@ export_proto_np(PREFIX(gerror)); void PREFIX(gerror) (char * msg, gfc_charlen_type msg_len) { - int p_len; + gfc_charlen_type p_len; char *p; p = gf_strerror (errno, msg, msg_len); diff --git a/libgfortran/intrinsics/getlog.c b/libgfortran/intrinsics/getlog.c index a856cd1..33ad52e 100644 --- a/libgfortran/intrinsics/getlog.c +++ b/libgfortran/intrinsics/getlog.c @@ -70,7 +70,6 @@ export_proto_np(PREFIX(getlog)); void PREFIX(getlog) (char * login, gfc_charlen_type login_len) { - int p_len; char *p; memset (login, ' ', login_len); /* Blank the string. */ @@ -107,7 +106,7 @@ PREFIX(getlog) (char * login, gfc_charlen_type login_len) if (p == NULL) goto cleanup; - p_len = strlen (p); + gfc_charlen_type p_len = strlen (p); if (login_len < p_len) p_len = login_len; memcpy (login, p, p_len); diff --git a/libgfortran/intrinsics/hostnm.c b/libgfortran/intrinsics/hostnm.c index 2ccb5bdb..2395067 100644 --- a/libgfortran/intrinsics/hostnm.c +++ b/libgfortran/intrinsics/hostnm.c @@ -88,8 +88,8 @@ w32_gethostname (char *name, size_t len) static int hostnm_0 (char *name, gfc_charlen_type name_len) { - int val, i; char p[HOST_NAME_MAX + 1]; + int val; memset (name, ' ', name_len); @@ -99,8 +99,7 @@ hostnm_0 (char *name, gfc_charlen_type name_len) if (val == 0) { - i = -1; - while (i < name_len && p[++i] != '\0') + for (gfc_charlen_type i = 0; i < name_len && p[i] != '\0'; i++) name[i] = p[i]; } diff --git a/libgfortran/intrinsics/string_intrinsics_inc.c b/libgfortran/intrinsics/string_intrinsics_inc.c index f514f4c..0da5130 100644 --- a/libgfortran/intrinsics/string_intrinsics_inc.c +++ b/libgfortran/intrinsics/string_intrinsics_inc.c @@ -224,14 +224,15 @@ string_len_trim (gfc_charlen_type len, const CHARTYPE *s) break; } } - - /* Now continue for the last characters with naive approach below. */ - assert (i >= 0); } /* Simply look for the first non-blank character. */ - while (i >= 0 && s[i] == ' ') - --i; + while (s[i] == ' ') + { + if (i == 0) + return 0; + --i; + } return i + 1; } @@ -327,12 +328,12 @@ string_scan (gfc_charlen_type slen, const CHARTYPE *str, if (back) { - for (i = slen - 1; i >= 0; i--) + for (i = slen; i != 0; i--) { for (j = 0; j < setlen; j++) { - if (str[i] == set[j]) - return (i + 1); + if (str[i - 1] == set[j]) + return i; } } } diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index b47f4e0..9724ccb 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -93,17 +93,17 @@ export_proto(transfer_logical); extern void transfer_logical_write (st_parameter_dt *, void *, int); export_proto(transfer_logical_write); -extern void transfer_character (st_parameter_dt *, void *, int); +extern void transfer_character (st_parameter_dt *, void *, gfc_charlen_type); export_proto(transfer_character); -extern void transfer_character_write (st_parameter_dt *, void *, int); +extern void transfer_character_write (st_parameter_dt *, void *, gfc_charlen_type); export_proto(transfer_character_write); -extern void transfer_character_wide (st_parameter_dt *, void *, int, int); +extern void transfer_character_wide (st_parameter_dt *, void *, gfc_charlen_type, int); export_proto(transfer_character_wide); extern void transfer_character_wide_write (st_parameter_dt *, - void *, int, int); + void *, gfc_charlen_type, int); export_proto(transfer_character_wide_write); extern void transfer_complex (st_parameter_dt *, void *, int); @@ -2272,7 +2272,7 @@ transfer_logical_write (st_parameter_dt *dtp, void *p, int kind) } void -transfer_character (st_parameter_dt *dtp, void *p, int len) +transfer_character (st_parameter_dt *dtp, void *p, gfc_charlen_type len) { static char *empty_string[0]; @@ -2290,13 +2290,13 @@ transfer_character (st_parameter_dt *dtp, void *p, int len) } void -transfer_character_write (st_parameter_dt *dtp, void *p, int len) +transfer_character_write (st_parameter_dt *dtp, void *p, gfc_charlen_type len) { transfer_character (dtp, p, len); } void -transfer_character_wide (st_parameter_dt *dtp, void *p, int len, int kind) +transfer_character_wide (st_parameter_dt *dtp, void *p, gfc_charlen_type len, int kind) { static char *empty_string[0]; @@ -2314,7 +2314,7 @@ transfer_character_wide (st_parameter_dt *dtp, void *p, int len, int kind) } void -transfer_character_wide_write (st_parameter_dt *dtp, void *p, int len, int kind) +transfer_character_wide_write (st_parameter_dt *dtp, void *p, gfc_charlen_type len, int kind) { transfer_character_wide (dtp, p, len, kind); } @@ -2351,7 +2351,7 @@ transfer_array (st_parameter_dt *dtp, gfc_array_char *desc, int kind, return; iotype = (bt) GFC_DESCRIPTOR_TYPE (desc); - size = iotype == BT_CHARACTER ? charlen : GFC_DESCRIPTOR_SIZE (desc); + size = iotype == BT_CHARACTER ? (index_type) charlen : GFC_DESCRIPTOR_SIZE (desc); rank = GFC_DESCRIPTOR_RANK (desc); for (n = 0; n < rank; n++) diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c index ed3bc32..2bd40e4 100644 --- a/libgfortran/io/unit.c +++ b/libgfortran/io/unit.c @@ -439,10 +439,9 @@ is_trim_ok (st_parameter_dt *dtp) if (dtp->common.flags & IOPARM_DT_HAS_FORMAT) { char *p = dtp->format; - off_t i; if (dtp->common.flags & IOPARM_DT_HAS_BLANK) return false; - for (i = 0; i < dtp->format_len; i++) + for (gfc_charlen_type i = 0; i < dtp->format_len; i++) { if (p[i] == '/') return false; if (p[i] == 'b' || p[i] == 'B') diff --git a/libgfortran/io/write.c b/libgfortran/io/write.c index 47970d4..86836df 100644 --- a/libgfortran/io/write.c +++ b/libgfortran/io/write.c @@ -2380,7 +2380,6 @@ void namelist_write (st_parameter_dt *dtp) { namelist_info * t1, *t2, *dummy = NULL; - index_type i; index_type dummy_offset = 0; char c; char * dummy_name = NULL; @@ -2402,7 +2401,7 @@ namelist_write (st_parameter_dt *dtp) write_character (dtp, "&", 1, 1, NODELIM); /* Write namelist name in upper case - f95 std. */ - for (i = 0 ;i < dtp->namelist_name_len ;i++ ) + for (gfc_charlen_type i = 0; i < dtp->namelist_name_len; i++ ) { c = toupper ((int) dtp->namelist_name[i]); write_character (dtp, &c, 1 ,1, NODELIM); diff --git a/libgfortran/libgfortran.h b/libgfortran/libgfortran.h index cfe0476..5b74a9d 100644 --- a/libgfortran/libgfortran.h +++ b/libgfortran/libgfortran.h @@ -250,7 +250,7 @@ typedef GFC_INTEGER_4 GFC_IO_INT; typedef ptrdiff_t index_type; /* The type used for the lengths of character variables. */ -typedef GFC_INTEGER_4 gfc_charlen_type; +typedef size_t gfc_charlen_type; /* Definitions of CHARACTER data types: - CHARACTER(KIND=1) corresponds to the C char type, |