From 35a1e1d1593f4355c9d87bbc8208a8736801a607 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 14 May 2015 13:19:26 -0400
Subject: [PATCH] Fix portability issue in pg_audit.

"%ld" is not a portable way to print int64's.  This may explain the
buildfarm crashes we're seeing --- it seems to make dromedary happy,
at least.
---
 contrib/pg_audit/pg_audit.c | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/contrib/pg_audit/pg_audit.c b/contrib/pg_audit/pg_audit.c
index 60f668ca01..13928cda21 100644
--- a/contrib/pg_audit/pg_audit.c
+++ b/contrib/pg_audit/pg_audit.c
@@ -384,8 +384,8 @@ stack_pop(int64 stackId)
 	if (auditEventStack != NULL && auditEventStack->stackId == stackId)
 		MemoryContextDelete(auditEventStack->contextAudit);
 	else
-		elog(ERROR, "pg_audit stack item %ld not found on top - cannot pop",
-					stackId);
+		elog(ERROR, "pg_audit stack item " INT64_FORMAT " not found on top - cannot pop",
+			 stackId);
 }
 
 /*
@@ -403,10 +403,9 @@ stack_valid(int64 stackId)
 
 	/* If we didn't find it, something went wrong. */
 	if (nextItem == NULL)
-		elog(ERROR, "pg_audit stack item %ld not found - top of stack is %ld",
-			 stackId, auditEventStack == NULL ? -1 : auditEventStack->stackId);
-
-	return;
+		elog(ERROR, "pg_audit stack item " INT64_FORMAT " not found - top of stack is " INT64_FORMAT "",
+			 stackId,
+			 auditEventStack == NULL ? (int64) -1 : auditEventStack->stackId);
 }
 
 /*
@@ -672,15 +671,21 @@ log_audit_event(AuditEventStackItem *stackItem)
 		appendStringInfoString(&auditStr,
 				"<previously logged>,<previously logged>");
 
-	/* Log the audit entry */
-	elog(auditLogLevel, "AUDIT: %s,%ld,%ld,%s,%s",
-			stackItem->auditEvent.granted ?
-				AUDIT_TYPE_OBJECT : AUDIT_TYPE_SESSION,
-			stackItem->auditEvent.statementId,
-			stackItem->auditEvent.substatementId,
-			className, auditStr.data);
-
-			stackItem->auditEvent.logged = true;
+	/*
+	 * Log the audit entry.  Note: use of INT64_FORMAT here is bad for
+	 * translatability, but we currently haven't got translation support in
+	 * pg_audit anyway.
+	 */
+	ereport(auditLogLevel,
+			(errmsg("AUDIT: %s," INT64_FORMAT "," INT64_FORMAT ",%s,%s",
+					stackItem->auditEvent.granted ?
+					AUDIT_TYPE_OBJECT : AUDIT_TYPE_SESSION,
+					stackItem->auditEvent.statementId,
+					stackItem->auditEvent.substatementId,
+					className,
+					auditStr.data)));
+
+	stackItem->auditEvent.logged = true;
 
 	MemoryContextSwitchTo(contextOld);
 }
-- 
2.40.0