]> granicus.if.org Git - postgresql/blob - src/backend/utils/adt/oid.c
Date/Time updates from Thomas...
[postgresql] / src / backend / utils / adt / oid.c
1 /*-------------------------------------------------------------------------
2  *
3  * oid.c--
4  *    Functions for the built-in type Oid.
5  *
6  * Copyright (c) 1994, Regents of the University of California
7  *
8  *
9  * IDENTIFICATION
10  *    $Header: /cvsroot/pgsql/src/backend/utils/adt/oid.c,v 1.6 1997/03/14 23:20:52 scrappy Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14
15 #include <stdio.h>
16 #include <string.h>
17
18 #include "postgres.h"
19 #include "utils/builtins.h"     /* where function declarations go */
20
21 /***************************************************************************** 
22  *   USER I/O ROUTINES                                                       *
23  *****************************************************************************/
24
25 /*
26  *      oid8in          - converts "num num ..." to internal form
27  *
28  *      Note:
29  *              Fills any nonexistent digits with NULL oids.
30  */
31 Oid *oid8in(char *oidString)
32 {
33     register Oid        (*result)[];
34     int                 nums;
35     
36     if (oidString == NULL)
37         return(NULL);
38     result = (Oid (*)[]) palloc(sizeof(Oid [8]));
39     if ((nums = sscanf(oidString, "%d%d%d%d%d%d%d%d",
40                        &(*result)[0],
41                        &(*result)[1],
42                        &(*result)[2],
43                        &(*result)[3],
44                        &(*result)[4],
45                        &(*result)[5],
46                        &(*result)[6],
47                        &(*result)[7])) != 8) {
48         do
49             (*result)[nums++] = 0;
50         while (nums < 8);
51     }
52     return((Oid *) result);
53 }
54
55 /*
56  *      oid8out - converts internal form to "num num ..."
57  */
58 char *oid8out(Oid       (*oidArray)[])
59 {
60     register int                num;
61     register Oid        *sp;
62     register char               *rp;
63     char                        *result;
64     
65     if (oidArray == NULL) {
66         result = (char *) palloc(2);
67         result[0] = '-';
68         result[1] = '\0';
69         return(result);
70     }
71     
72     /* assumes sign, 10 digits, ' ' */
73     rp = result = (char *) palloc(8 * 12);
74     sp = *oidArray;
75     for (num = 8; num != 0; num--) {
76         ltoa(*sp++, rp);
77         while (*++rp != '\0')
78             ;
79         *rp++ = ' ';
80     }
81     *--rp = '\0';
82     return(result);
83 }
84
85 Oid oidin(char *s)
86 {
87     extern int32 int4in();
88     
89     return(int4in(s));
90 }
91
92 char *oidout(Oid o)
93 {
94     extern char *int4out();
95     
96     return(int4out(o));
97 }
98
99 /***************************************************************************** 
100  *   PUBLIC ROUTINES                                                         *
101  *****************************************************************************/
102
103 bool oideq(Oid arg1, Oid arg2)
104 {
105     return(arg1 == arg2);
106 }
107
108 bool oidne(Oid arg1, Oid arg2)
109 {
110     return(arg1 != arg2);
111 }
112
113 bool oid8eq(Oid arg1[], Oid arg2[])
114 {
115     return (bool)(memcmp(arg1, arg2, 8 * sizeof(Oid)) == 0);
116 }
117
118 bool oideqint4(Oid arg1, int32 arg2)
119 {
120 /* oid is unsigned, but int4 is signed */
121     return (arg2 >= 0 && arg1 == arg2);
122 }
123
124 bool int4eqoid(int32 arg1, Oid arg2)
125 {
126 /* oid is unsigned, but int4 is signed */
127     return (arg1 >= 0 && arg1 == arg2);
128 }
129