X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=sql-aptvc.cpp;h=54ba9e92f60fdf470b872131cf3d09b2be599db2;hb=fb3d44c5e9b4a010f56cffd8fd5e35d6221805f9;hp=27bebe47f363addcd193ddd7aac6d2fa20a29b27;hpb=8e7b460758fb8a59697f2a95f1dc6279a676998f;p=dak.git diff --git a/sql-aptvc.cpp b/sql-aptvc.cpp index 27bebe47..54ba9e92 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 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); } }