diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/util/profile/prof_file.c | 15 | ||||
| -rw-r--r-- | src/util/profile/prof_init.c | 2 | ||||
| -rw-r--r-- | src/util/profile/prof_int.h | 12 |
3 files changed, 20 insertions, 9 deletions
diff --git a/src/util/profile/prof_file.c b/src/util/profile/prof_file.c index c6f15fee5..cee34ef2c 100644 --- a/src/util/profile/prof_file.c +++ b/src/util/profile/prof_file.c @@ -157,6 +157,15 @@ static int r_access(const_profile_filespec_t filespec) #endif } +int profile_file_is_writable(prf_file_t profile) +{ + if (profile && profile->data) { + return rw_access(profile->data->filespec); + } else { + return 0; + } +} + prf_data_t profile_make_prf_data(const char *filename) { @@ -371,9 +380,7 @@ errcode_t profile_update_file_data(prf_data_t data) } set_cloexec_file(f); data->upd_serial++; - data->flags &= PROFILE_FILE_SHARED; - if (rw_access(data->filespec)) - data->flags |= PROFILE_FILE_RW; + data->flags &= PROFILE_FILE_SHARED; /* FIXME same as '=' operator */ retval = profile_parse_file(f, &data->root); fclose(f); if (retval) { @@ -472,8 +479,6 @@ static errcode_t write_data_to_file(prf_data_t data, const char *outfile, } data->flags = 0; - if (rw_access(outfile)) - data->flags |= PROFILE_FILE_RW; retval = 0; errout: diff --git a/src/util/profile/prof_init.c b/src/util/profile/prof_init.c index 9a5659a8c..f0ff1370c 100644 --- a/src/util/profile/prof_init.c +++ b/src/util/profile/prof_init.c @@ -160,7 +160,7 @@ profile_is_writable(profile_t profile, int *writable) return EINVAL; if (profile->first_file) - *writable = (profile->first_file->data->flags & PROFILE_FILE_RW); + *writable = profile_file_is_writable(profile->first_file); return 0; } diff --git a/src/util/profile/prof_int.h b/src/util/profile/prof_int.h index d6349afd7..02e1f21da 100644 --- a/src/util/profile/prof_int.h +++ b/src/util/profile/prof_int.h @@ -72,10 +72,13 @@ typedef struct _prf_file_t *prf_file_t; /* * The profile flags + * + * Deprecated use of read/write profile flag. + * Check whether file is writable lazily so we don't call access as often. */ -#define PROFILE_FILE_RW 0x0001 -#define PROFILE_FILE_DIRTY 0x0002 -#define PROFILE_FILE_SHARED 0x0004 +#define PROFILE_FILE_DEPRECATED_RW 0x0001 +#define PROFILE_FILE_DIRTY 0x0002 +#define PROFILE_FILE_SHARED 0x0004 /* * This structure defines the high-level, user visible profile_t @@ -218,6 +221,9 @@ void profile_free_file errcode_t profile_close_file (prf_file_t profile); +int profile_file_is_writable + (prf_file_t profile); + void profile_dereference_data (prf_data_t); void profile_dereference_data_locked (prf_data_t); |
