diff options
author | Thomas G. Lockhart <lockhart@fourpalms.org> | 1998-05-29 13:33:58 +0000 |
---|---|---|
committer | Thomas G. Lockhart <lockhart@fourpalms.org> | 1998-05-29 13:33:58 +0000 |
commit | 457b6efa4348437ee9b475f6e3b4eafcdee1fc01 (patch) | |
tree | 5541bb0da5746b511ff31c1432aad763842c5d9e /src/backend/utils/adt/varchar.c | |
parent | e8cbf3a79c6243c4297d729770d985126bb0107d (diff) | |
download | postgresql-457b6efa4348437ee9b475f6e3b4eafcdee1fc01.tar.gz postgresql-457b6efa4348437ee9b475f6e3b4eafcdee1fc01.zip |
Add conversion functions to and from the "name" data type.
Diffstat (limited to 'src/backend/utils/adt/varchar.c')
-rw-r--r-- | src/backend/utils/adt/varchar.c | 69 |
1 files changed, 66 insertions, 3 deletions
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c index 7f30f2bab69..cd43dcdace9 100644 --- a/src/backend/utils/adt/varchar.c +++ b/src/backend/utils/adt/varchar.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.31 1998/05/09 22:42:07 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.32 1998/05/29 13:33:24 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -201,8 +201,7 @@ int32 bpchar_char(char *s) { return ((int32) *VARDATA(s)); -} /* char_bpchar() */ - +} /* bpchar_char() */ /* char_bpchar() * Convert char to bpchar(1). @@ -221,6 +220,70 @@ char_bpchar(int32 c) } /* char_bpchar() */ +/* bpchar_name() + * Converts a bpchar() type to a NameData type. + */ +NameData * +bpchar_name(char *s) +{ + NameData *result; + int len; + + if (s == NULL) + return (NULL); + + len = VARSIZE(s) - VARHDRSZ; + if (len > NAMEDATALEN) len = NAMEDATALEN; + + while (len > 0) { + if (*(VARDATA(s)+len-1) != ' ') break; + len--; + } + +#ifdef STRINGDEBUG +printf("bpchar- convert string length %d (%d) ->%d\n", + VARSIZE(s)-VARHDRSZ, VARSIZE(s), len); +#endif + + result = (NameData *) palloc(NAMEDATALEN); + StrNCpy(result->data, VARDATA(s), NAMEDATALEN); + + /* now null pad to full length... */ + while (len < NAMEDATALEN) { + *(result->data + len) = '\0'; + len++; + } + + return (result); +} /* bpchar_name() */ + +/* name_bpchar() + * Converts a NameData type to a bpchar type. + */ +char * +name_bpchar(NameData *s) +{ + char *result; + int len; + + if (s == NULL) + return (NULL); + + len = strlen(s->data); + +#ifdef STRINGDEBUG +printf("bpchar- convert string length %d (%d) ->%d\n", + VARSIZE(s)-VARHDRSZ, VARSIZE(s), len); +#endif + + result = (char *) palloc(VARHDRSZ + len); + strncpy(VARDATA(result), s->data, len); + VARSIZE(result) = len + VARHDRSZ; + + return (result); +} /* name_bpchar() */ + + /***************************************************************************** * varchar - varchar() * *****************************************************************************/ |