X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=sql-aptvc.cpp;h=6f14ee64702cde11852573deb6b3f056ede11959;hb=c5617d291dc17395a9d23c757d7dc815f6eed49e;hp=2a4dbd2a57a22fd5be2d0b8225b015bf52f42dce;hpb=cb9b3094647cecdc69320ba60eca8099880e33f8;p=dak.git diff --git a/sql-aptvc.cpp b/sql-aptvc.cpp index 2a4dbd2a..6f14ee64 100644 --- a/sql-aptvc.cpp +++ b/sql-aptvc.cpp @@ -16,18 +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); } }