summaryrefslogtreecommitdiff
path: root/contrib/adminpack
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/adminpack')
-rw-r--r--contrib/adminpack/adminpack.c33
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)
{