diff options
Diffstat (limited to 'contrib/adminpack')
-rw-r--r-- | contrib/adminpack/adminpack.c | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/contrib/adminpack/adminpack.c b/contrib/adminpack/adminpack.c index ea781a0a5a..10338f951f 100644 --- a/contrib/adminpack/adminpack.c +++ b/contrib/adminpack/adminpack.c @@ -3,7 +3,7 @@ * adminpack.c * * - * Copyright (c) 2002-2016, PostgreSQL Global Development Group + * Copyright (c) 2002-2017, PostgreSQL Global Development Group * * Author: Andreas Pflug <pgadmin@pse-consulting.de> * @@ -124,8 +124,8 @@ pg_file_write(PG_FUNCTION_ARGS) requireSuperuser(); - filename = convert_and_check_filename(PG_GETARG_TEXT_P(0), false); - data = PG_GETARG_TEXT_P(1); + filename = convert_and_check_filename(PG_GETARG_TEXT_PP(0), false); + data = PG_GETARG_TEXT_PP(1); if (!PG_GETARG_BOOL(2)) { @@ -136,10 +136,10 @@ pg_file_write(PG_FUNCTION_ARGS) (ERRCODE_DUPLICATE_FILE, errmsg("file \"%s\" exists", filename))); - f = fopen(filename, "wb"); + f = AllocateFile(filename, "wb"); } else - f = fopen(filename, "ab"); + f = AllocateFile(filename, "ab"); if (!f) ereport(ERROR, @@ -147,16 +147,11 @@ pg_file_write(PG_FUNCTION_ARGS) errmsg("could not open file \"%s\" for writing: %m", filename))); - if (VARSIZE(data) != 0) - { - count = fwrite(VARDATA(data), 1, VARSIZE(data) - VARHDRSZ, f); - - if (count != VARSIZE(data) - VARHDRSZ) - ereport(ERROR, - (errcode_for_file_access(), - errmsg("could not write file \"%s\": %m", filename))); - } - fclose(f); + count = fwrite(VARDATA_ANY(data), 1, VARSIZE_ANY_EXHDR(data), f); + if (count != VARSIZE_ANY_EXHDR(data) || FreeFile(f)) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not write file \"%s\": %m", filename))); PG_RETURN_INT64(count); } @@ -175,12 +170,12 @@ pg_file_rename(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0) || PG_ARGISNULL(1)) PG_RETURN_NULL(); - fn1 = convert_and_check_filename(PG_GETARG_TEXT_P(0), false); - fn2 = convert_and_check_filename(PG_GETARG_TEXT_P(1), false); + fn1 = convert_and_check_filename(PG_GETARG_TEXT_PP(0), false); + fn2 = convert_and_check_filename(PG_GETARG_TEXT_PP(1), false); if (PG_ARGISNULL(2)) fn3 = 0; else - fn3 = convert_and_check_filename(PG_GETARG_TEXT_P(2), false); + fn3 = convert_and_check_filename(PG_GETARG_TEXT_PP(2), false); if (access(fn1, W_OK) < 0) { @@ -259,7 +254,7 @@ pg_file_unlink(PG_FUNCTION_ARGS) requireSuperuser(); - filename = convert_and_check_filename(PG_GETARG_TEXT_P(0), false); + filename = convert_and_check_filename(PG_GETARG_TEXT_PP(0), false); if (access(filename, W_OK) < 0) { |