From: James Troup Date: Thu, 13 Sep 2001 23:56:46 +0000 (+0000) Subject: actually work by not comparing unterminated strings X-Git-Url: https://git.decadent.org.uk/gitweb/?a=commitdiff_plain;h=2145a419bad4bcb124e9cfac23f005dc37f856f7;p=dak.git actually work by not comparing unterminated strings --- diff --git a/sql-aptvc.cpp b/sql-aptvc.cpp index 2a4dbd2a..54ba9e92 100644 --- a/sql-aptvc.cpp +++ b/sql-aptvc.cpp @@ -16,6 +16,10 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* NB: do not try to use the VERSION-1 calling conventions for + C-Language functions; it works on i386 but segfaults the postgres + child backend on Sparc. */ + #include extern "C" @@ -25,9 +29,28 @@ extern "C" int versioncmp(text *A, text *B); - int versioncmp (text *A, text *B) + int + versioncmp (text *A, text *B) { - return debVS.CmpVersion (VARDATA(A), VARDATA(B)); + int result, txt_size; + char *a, *b; + + txt_size = VARSIZE(A)-VARHDRSZ; + a = (char *) palloc(txt_size+1); + memcpy(a, VARDATA(A), txt_size); + a[txt_size] = '\0'; + + txt_size = VARSIZE(B)-VARHDRSZ; + b = (char *) palloc(txt_size+1); + memcpy(b, VARDATA(B), txt_size); + b[txt_size] = '\0'; + + result = debVS.CmpVersion (a, b); + + pfree (a); + pfree (b); + + return (result); } }