X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=sql-aptvc.cpp;h=6f14ee64702cde11852573deb6b3f056ede11959;hb=950d3a6f5d3733d912a9e9b586d8de7d9405db7b;hp=27bebe47f363addcd193ddd7aac6d2fa20a29b27;hpb=8e7b460758fb8a59697f2a95f1dc6279a676998f;p=dak.git diff --git a/sql-aptvc.cpp b/sql-aptvc.cpp index 27bebe47..6f14ee64 100644 --- a/sql-aptvc.cpp +++ b/sql-aptvc.cpp @@ -16,19 +16,41 @@ * 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" { -#include -#include +#include 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); } }