]> granicus.if.org Git - postgresql/blob - src/backend/utils/adt/tid.c
Another PGINDENT run that changes variable indenting and case label indenting. Also...
[postgresql] / src / backend / utils / adt / tid.c
1 /*-------------------------------------------------------------------------
2  *
3  * tid.c--
4  *        Functions for the built-in type tuple id
5  *
6  * Copyright (c) 1994, Regents of the University of California
7  *
8  *
9  * IDENTIFICATION
10  *        $Header: /cvsroot/pgsql/src/backend/utils/adt/tid.c,v 1.4 1997/09/08 02:31:03 momjian Exp $
11  *
12  * NOTES
13  *        input routine largely stolen from boxin().
14  *
15  *-------------------------------------------------------------------------
16  */
17 #include <stdio.h>                              /* for sprintf() */
18 #include <string.h>
19 #include "postgres.h"
20 #include "storage/bufpage.h"
21
22 #include "utils/palloc.h"
23 #include "utils/builtins.h"             /* where function declarations go */
24
25
26 #define LDELIM                  '('
27 #define RDELIM                  ')'
28 #define DELIM                   ','
29 #define NTIDARGS                2
30
31 /* ----------------------------------------------------------------
32  *              tidin
33  * ----------------------------------------------------------------
34  */
35 ItemPointer
36 tidin(char *str)
37 {
38         char       *p,
39                            *coord[NTIDARGS];
40         int                     i;
41         ItemPointer result;
42
43         BlockNumber blockNumber;
44         OffsetNumber offsetNumber;
45
46         if (str == NULL)
47                 return NULL;
48
49         for (i = 0, p = str; *p && i < NTIDARGS && *p != RDELIM; p++)
50                 if (*p == DELIM || (*p == LDELIM && !i))
51                         coord[i++] = p + 1;
52
53         if (i < NTIDARGS - 1)
54                 return NULL;
55
56         blockNumber = (BlockNumber) atoi(coord[0]);
57         offsetNumber = (OffsetNumber) atoi(coord[1]);
58
59         result = (ItemPointer) palloc(sizeof(ItemPointerData));
60
61         ItemPointerSet(result, blockNumber, offsetNumber);
62
63         return result;
64 }
65
66 /* ----------------------------------------------------------------
67  *              tidout
68  * ----------------------------------------------------------------
69  */
70 char       *
71 tidout(ItemPointer itemPtr)
72 {
73         BlockNumber blockNumber;
74         OffsetNumber offsetNumber;
75         BlockId         blockId;
76         char            buf[32];
77         char       *str;
78
79         blockId = &(itemPtr->ip_blkid);
80
81         blockNumber = BlockIdGetBlockNumber(blockId);
82         offsetNumber = itemPtr->ip_posid;
83
84         sprintf(buf, "(%d,%d)", blockNumber, offsetNumber);
85
86         str = (char *) palloc(strlen(buf) + 1);
87         strcpy(str, buf);
88
89         return str;
90 }