summaryrefslogtreecommitdiff
path: root/src/interfaces/libpq/fe-misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/libpq/fe-misc.c')
-rw-r--r--src/interfaces/libpq/fe-misc.c193
1 files changed, 193 insertions, 0 deletions
diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c
new file mode 100644
index 00000000000..c8b703b9d33
--- /dev/null
+++ b/src/interfaces/libpq/fe-misc.c
@@ -0,0 +1,193 @@
+/*-------------------------------------------------------------------------
+ *
+ * FILE
+ * fe-misc.c
+ *
+ * DESCRIPTION
+ * miscellaneous useful functions
+ * these routines are analogous to the ones in libpq/pqcomm.c
+ *
+ * Copyright (c) 1994, Regents of the University of California
+ *
+ *
+ * IDENTIFICATION
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-misc.c,v 1.1.1.1 1996/07/09 06:22:17 scrappy Exp $
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+/* pqGetc:
+ get a character from stream f
+
+ if debug is set, also echo the character fetched
+*/
+int
+pqGetc(FILE* fin, FILE* debug)
+{
+ int c;
+
+ c = getc(fin);
+ if (debug && c != EOF)
+ putc(c,debug);
+ return c;
+}
+
+/* pqPutnchar:
+ send a string of exactly len length into stream f
+
+ returns 1 if there was an error, 0 otherwise.
+*/
+int
+pqPutnchar(char* s, int len, FILE *f, FILE *debug)
+{
+ int status;
+
+ if (f == NULL)
+ return 1;
+
+ while (len--) {
+ status = fputc(*s,f);
+ if (debug)
+ fputc(*s,debug);
+ s++;
+ if (status == EOF)
+ return 1;
+ }
+ return 0;
+}
+
+/* pqGetnchar:
+ get a string of exactly len length from stream f
+*/
+int
+pqGetnchar(char* s, int len, FILE *f, FILE *debug)
+{
+ int c;
+
+ if (f == NULL)
+ return 1;
+
+ while (len-- && (c = getc(f)) != EOF)
+ *s++ = c;
+ *s = '\0';
+
+ if (debug) {
+ fputs(s,debug);
+ }
+ return 0;
+}
+
+/* pqGets:
+ get a string of up to length len from stream f
+*/
+int
+pqGets(char* s, int len, FILE *f, FILE *debug)
+{
+ int c;
+
+ if (f == NULL)
+ return 1;
+
+ while (len-- && (c = getc(f)) != EOF && c)
+ *s++ = c;
+ *s = '\0';
+
+ if (debug) {
+ fputs(s,debug);
+ }
+ return 0;
+}
+
+
+/* pgPutInt
+ send an integer of up to 4 bytesto the file stream
+ do this one byte at at time.
+ This insures that machines with different ENDIANness can talk to each other
+ get a n-byte integer from the stream into result
+ returns 0 if successful, 1 otherwise
+*/
+int
+pqPutInt(int i, int bytes, FILE* f, FILE *debug)
+{
+ int status;
+
+ if (bytes > 4)
+ bytes = 4;
+
+ while (bytes--) {
+ status = fputc(i & 0xff, f);
+ if (debug)
+ fputc(i & 0xff, debug);
+ i >>= 8;
+ if (status == EOF) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/* pgGetInt
+ reconstructs the integer one byte at a time.
+ This insures that machines with different ENDIANness can talk to each other
+ get a n-byte integer from the stream into result
+ returns 0 if successful
+*/
+int
+pqGetInt(int* result, int bytes, FILE* f, FILE *debug)
+{
+ int c;
+ int p;
+ int n;
+
+ if (f == NULL)
+ return 1;
+
+ p = 0;
+ n = 0;
+ while (bytes && (c = getc(f)) != EOF)
+ {
+ n |= (c & 0xff) << p;
+ p += 8;
+ bytes--;
+ }
+
+ if (bytes != 0)
+ return 1;
+
+ *result = n;
+ if (debug)
+ fprintf(debug,"%d",*result);
+ return 0;
+}
+
+
+int
+pqPuts(char* s, FILE *f, FILE *debug)
+{
+ if (f == NULL)
+ return 1;
+
+ if (fputs(s,f) == EOF)
+ return 1;
+
+ fputc('\0',f); /* important to send an ending EOF since backend expects it */
+ fflush(f);
+
+ if (debug) {
+ fputs(s,debug);
+ }
+ return 0;
+}
+
+
+void
+pqFlush(FILE *f, FILE *debug)
+{
+ if (f)
+ fflush(f);
+ if (debug)
+ fflush(debug);
+}