Re: Beos Patch - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: Beos Patch
Date
Msg-id 200108071656.f77GubT22488@candle.pha.pa.us
Whole thread Raw
Responses Re: Re: Beos Patch
List pgsql-patches
Can't apply to 7.1.X, only upcoming 7.2. Applied.


>
>
>     Hi bruce,
>
>
>     a small patch to keep postgres working on the latest BeOS.
>
>     If it's possible, can you apply this patch against Current CVS  AND
> REL7_1_STABLE.
>
>         Thanks
>
>             cyril

[ Attachment, skipping... ]

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
Index: src/backend/port/beos/support.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/port/beos/support.c,v
retrieving revision 1.4
diff -c -r1.4 support.c
*** src/backend/port/beos/support.c    2001/03/22 03:59:42    1.4
--- src/backend/port/beos/support.c    2001/08/05 21:12:27
***************
*** 115,120 ****
--- 115,136 ----
      }
  }

+ void
+ beos_dl_sym(image_id im,char* symname,void** fptr)
+ {
+     /* Send command '3' (get symbol) to the support server */
+     write_port(beos_dl_port_in, 3, symname, strlen(symname) + 1);
+     write_port(beos_dl_port_in, im, NULL,0);
+
+     /* Read sym address */
+     read_port(beos_dl_port_out, (int32*)(fptr), NULL, 0);
+
+     if (fptr==NULL)
+     {
+         elog(NOTICE, "loading symbol '%s' failed ", symname);
+     }
+ }
+
  status_t
  beos_dl_close(image_id im)
  {
***************
*** 164,175 ****
               * server
               */
              read_port(port_in, &opcode, datas, 4000);
!
              switch (opcode)
              {
                      image_id    addon;
                      image_info    info_im;
                      area_info    info_ar;

                      /* Load Add-On */
                  case 1:
--- 180,192 ----
               * server
               */
              read_port(port_in, &opcode, datas, 4000);
!
              switch (opcode)
              {
                      image_id    addon;
                      image_info    info_im;
                      area_info    info_ar;
+                     void  *     fpt;

                      /* Load Add-On */
                  case 1:
***************
*** 208,213 ****
--- 225,257 ----
                      write_port(port_out, unload_add_on(*((int *) (datas))), NULL, 0);
                      break;
                      /* Cleanup and exit */
+                 case 3:
+
+                     /* read image Id on the input port */
+                     read_port(port_in, &addon,NULL,0);
+
+                     /* Loading symbol */
+                     fpt=NULL;
+
+
+                 if (get_image_symbol(addon, datas, B_SYMBOL_TYPE_TEXT, &fpt) == B_OK);
+                     {
+
+                         /*
+                          * Sometime the loader return B_OK for an inexistant function
+                          * with an invalid address !!! Check that the return address
+                          * is in the image range
+                          */
+
+                         get_image_info(addon, &info_im);
+                         if ((fpt < info_im.text) ||(fpt >= (info_im.text +info_im.text_size)))
+                             fpt=NULL;
+                     }
+
+                     /* Send back fptr of data segment */
+                     write_port(port_out, (int32)(fpt),NULL,0);
+                     break;
+
                  default:
                      /* Free system resources */
                      delete_port(port_in);
Index: src/backend/port/dynloader/beos.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/port/dynloader/beos.c,v
retrieving revision 1.7
diff -c -r1.7 beos.c
*** src/backend/port/dynloader/beos.c    2001/03/22 03:59:42    1.7
--- src/backend/port/dynloader/beos.c    2001/08/05 21:12:28
***************
*** 49,71 ****
      /* Checking that "Handle" is valid */
      if ((handle) && ((*(int *) (handle)) >= 0))
      {
!         /* Loading symbol */
!         if (get_image_symbol(*((int *) (handle)), funcname, B_SYMBOL_TYPE_TEXT, (void **) &fpt) == B_OK);
!         {
!
!             /*
!              * Sometime the loader return B_OK for an inexistant function
!              * with an invalid address !!! Check that the return address
!              * is in the image range
!              */
!             image_info    info;
!
!             get_image_info(*((int *) (handle)), &info);
!             if ((fpt < info.text) ||(fpt >= (info.text +info.text_size)))
!                 return NULL;
!             return fpt;
!         }
!         elog(NOTICE, "loading symbol '%s' failed ", funcname);
      }
      elog(NOTICE, "add-on not loaded correctly");
      return NULL;
--- 49,56 ----
      /* Checking that "Handle" is valid */
      if ((handle) && ((*(int *) (handle)) >= 0))
      {
!         beos_dl_sym(*((int *) (handle)),funcname,(void **) &fpt);
!         return fpt;
      }
      elog(NOTICE, "add-on not loaded correctly");
      return NULL;
Index: src/include/port/beos.h
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/port/beos.h,v
retrieving revision 1.9
diff -c -r1.9 beos.h
*** src/include/port/beos.h    2001/03/22 04:00:58    1.9
--- src/include/port/beos.h    2001/08/05 21:12:34
***************
*** 1,5 ****
  #include <kernel/OS.h>
! #include "kernel/image.h"

  #define HAS_TEST_AND_SET

--- 1,6 ----
  #include <kernel/OS.h>
! #include <kernel/image.h>
! #include <sys/ioctl.h>

  #define HAS_TEST_AND_SET

***************
*** 68,73 ****
--- 69,77 ----

  /* Load a shared library */
  image_id    beos_dl_open(char *filename);
+
+ /* Find symbol */
+ void         beos_dl_sym(image_id im,char* symname,void** fptr);

  /* UnLoad a shared library */
  status_t    beos_dl_close(image_id im);

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Re: Fuzzy matching
Next
From: Bruce Momjian
Date:
Subject: Re: contrib/postgis spatial extensions