88 *
99 *
1010 * IDENTIFICATION
11- * $PostgreSQL: pgsql/src/backend/utils/fmgr/fmgr.c,v 1.106 2007/04/06 04:21:43 tgl Exp $
11+ * $PostgreSQL: pgsql/src/backend/utils/fmgr/fmgr.c,v 1.107 2007/07/13 02:25:48 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
3838 * declare the function pointer to return int, so the compiler picks up the
3939 * return value from %d0. (Functions returning pointers put their value
4040 * *additionally* into %d0 for compatibility.) The price is that there are
41- * some warnings about int->pointer conversions...
41+ * some warnings about int->pointer conversions ... which we can suppress
42+ * with suitably ugly casts in fmgr_oldstyle().
4243 */
4344#if (defined(__mc68000__ )|| (defined(__m68k__ )))&& defined(__ELF__ )
4445typedef int32 (* func_ptr ) ();
@@ -626,7 +627,7 @@ fmgr_oldstyle(PG_FUNCTION_ARGS)
626627switch (n_arguments )
627628{
628629case 0 :
629- returnValue = (* user_fn ) ();
630+ returnValue = (char * ) ( * user_fn ) ();
630631break ;
631632case 1 :
632633
@@ -635,108 +636,173 @@ fmgr_oldstyle(PG_FUNCTION_ARGS)
635636 * there are other functions still out there that also rely on
636637 * this undocumented hack?
637638 */
638- returnValue = (* user_fn ) (fcinfo -> arg [0 ],& fcinfo -> isnull );
639+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
640+ & fcinfo -> isnull );
639641break ;
640642case 2 :
641- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ]);
643+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
644+ fcinfo -> arg [1 ]);
642645break ;
643646case 3 :
644- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
645- fcinfo -> arg [2 ]);
647+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
648+ fcinfo -> arg [1 ],
649+ fcinfo -> arg [2 ]);
646650break ;
647651case 4 :
648- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
649- fcinfo -> arg [2 ],fcinfo -> arg [3 ]);
652+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
653+ fcinfo -> arg [1 ],
654+ fcinfo -> arg [2 ],
655+ fcinfo -> arg [3 ]);
650656break ;
651657case 5 :
652- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
653- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
654- fcinfo -> arg [4 ]);
658+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
659+ fcinfo -> arg [1 ],
660+ fcinfo -> arg [2 ],
661+ fcinfo -> arg [3 ],
662+ fcinfo -> arg [4 ]);
655663break ;
656664case 6 :
657- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
658- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
659- fcinfo -> arg [4 ],fcinfo -> arg [5 ]);
665+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
666+ fcinfo -> arg [1 ],
667+ fcinfo -> arg [2 ],
668+ fcinfo -> arg [3 ],
669+ fcinfo -> arg [4 ],
670+ fcinfo -> arg [5 ]);
660671break ;
661672case 7 :
662- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
663- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
664- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
665- fcinfo -> arg [6 ]);
673+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
674+ fcinfo -> arg [1 ],
675+ fcinfo -> arg [2 ],
676+ fcinfo -> arg [3 ],
677+ fcinfo -> arg [4 ],
678+ fcinfo -> arg [5 ],
679+ fcinfo -> arg [6 ]);
666680break ;
667681case 8 :
668- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
669- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
670- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
671- fcinfo -> arg [6 ],fcinfo -> arg [7 ]);
682+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
683+ fcinfo -> arg [1 ],
684+ fcinfo -> arg [2 ],
685+ fcinfo -> arg [3 ],
686+ fcinfo -> arg [4 ],
687+ fcinfo -> arg [5 ],
688+ fcinfo -> arg [6 ],
689+ fcinfo -> arg [7 ]);
672690break ;
673691case 9 :
674- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
675- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
676- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
677- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
678- fcinfo -> arg [8 ]);
692+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
693+ fcinfo -> arg [1 ],
694+ fcinfo -> arg [2 ],
695+ fcinfo -> arg [3 ],
696+ fcinfo -> arg [4 ],
697+ fcinfo -> arg [5 ],
698+ fcinfo -> arg [6 ],
699+ fcinfo -> arg [7 ],
700+ fcinfo -> arg [8 ]);
679701break ;
680702case 10 :
681- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
682- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
683- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
684- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
685- fcinfo -> arg [8 ],fcinfo -> arg [9 ]);
703+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
704+ fcinfo -> arg [1 ],
705+ fcinfo -> arg [2 ],
706+ fcinfo -> arg [3 ],
707+ fcinfo -> arg [4 ],
708+ fcinfo -> arg [5 ],
709+ fcinfo -> arg [6 ],
710+ fcinfo -> arg [7 ],
711+ fcinfo -> arg [8 ],
712+ fcinfo -> arg [9 ]);
686713break ;
687714case 11 :
688- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
689- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
690- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
691- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
692- fcinfo -> arg [8 ],fcinfo -> arg [9 ],
693- fcinfo -> arg [10 ]);
715+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
716+ fcinfo -> arg [1 ],
717+ fcinfo -> arg [2 ],
718+ fcinfo -> arg [3 ],
719+ fcinfo -> arg [4 ],
720+ fcinfo -> arg [5 ],
721+ fcinfo -> arg [6 ],
722+ fcinfo -> arg [7 ],
723+ fcinfo -> arg [8 ],
724+ fcinfo -> arg [9 ],
725+ fcinfo -> arg [10 ]);
694726break ;
695727case 12 :
696- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
697- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
698- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
699- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
700- fcinfo -> arg [8 ],fcinfo -> arg [9 ],
701- fcinfo -> arg [10 ],fcinfo -> arg [11 ]);
728+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
729+ fcinfo -> arg [1 ],
730+ fcinfo -> arg [2 ],
731+ fcinfo -> arg [3 ],
732+ fcinfo -> arg [4 ],
733+ fcinfo -> arg [5 ],
734+ fcinfo -> arg [6 ],
735+ fcinfo -> arg [7 ],
736+ fcinfo -> arg [8 ],
737+ fcinfo -> arg [9 ],
738+ fcinfo -> arg [10 ],
739+ fcinfo -> arg [11 ]);
702740break ;
703741case 13 :
704- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
705- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
706- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
707- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
708- fcinfo -> arg [8 ],fcinfo -> arg [9 ],
709- fcinfo -> arg [10 ],fcinfo -> arg [11 ],
710- fcinfo -> arg [12 ]);
742+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
743+ fcinfo -> arg [1 ],
744+ fcinfo -> arg [2 ],
745+ fcinfo -> arg [3 ],
746+ fcinfo -> arg [4 ],
747+ fcinfo -> arg [5 ],
748+ fcinfo -> arg [6 ],
749+ fcinfo -> arg [7 ],
750+ fcinfo -> arg [8 ],
751+ fcinfo -> arg [9 ],
752+ fcinfo -> arg [10 ],
753+ fcinfo -> arg [11 ],
754+ fcinfo -> arg [12 ]);
711755break ;
712756case 14 :
713- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
714- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
715- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
716- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
717- fcinfo -> arg [8 ],fcinfo -> arg [9 ],
718- fcinfo -> arg [10 ],fcinfo -> arg [11 ],
719- fcinfo -> arg [12 ],fcinfo -> arg [13 ]);
757+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
758+ fcinfo -> arg [1 ],
759+ fcinfo -> arg [2 ],
760+ fcinfo -> arg [3 ],
761+ fcinfo -> arg [4 ],
762+ fcinfo -> arg [5 ],
763+ fcinfo -> arg [6 ],
764+ fcinfo -> arg [7 ],
765+ fcinfo -> arg [8 ],
766+ fcinfo -> arg [9 ],
767+ fcinfo -> arg [10 ],
768+ fcinfo -> arg [11 ],
769+ fcinfo -> arg [12 ],
770+ fcinfo -> arg [13 ]);
720771break ;
721772case 15 :
722- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
723- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
724- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
725- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
726- fcinfo -> arg [8 ],fcinfo -> arg [9 ],
727- fcinfo -> arg [10 ],fcinfo -> arg [11 ],
728- fcinfo -> arg [12 ],fcinfo -> arg [13 ],
729- fcinfo -> arg [14 ]);
773+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
774+ fcinfo -> arg [1 ],
775+ fcinfo -> arg [2 ],
776+ fcinfo -> arg [3 ],
777+ fcinfo -> arg [4 ],
778+ fcinfo -> arg [5 ],
779+ fcinfo -> arg [6 ],
780+ fcinfo -> arg [7 ],
781+ fcinfo -> arg [8 ],
782+ fcinfo -> arg [9 ],
783+ fcinfo -> arg [10 ],
784+ fcinfo -> arg [11 ],
785+ fcinfo -> arg [12 ],
786+ fcinfo -> arg [13 ],
787+ fcinfo -> arg [14 ]);
730788break ;
731789case 16 :
732- returnValue = (* user_fn ) (fcinfo -> arg [0 ],fcinfo -> arg [1 ],
733- fcinfo -> arg [2 ],fcinfo -> arg [3 ],
734- fcinfo -> arg [4 ],fcinfo -> arg [5 ],
735- fcinfo -> arg [6 ],fcinfo -> arg [7 ],
736- fcinfo -> arg [8 ],fcinfo -> arg [9 ],
737- fcinfo -> arg [10 ],fcinfo -> arg [11 ],
738- fcinfo -> arg [12 ],fcinfo -> arg [13 ],
739- fcinfo -> arg [14 ],fcinfo -> arg [15 ]);
790+ returnValue = (char * ) (* user_fn ) (fcinfo -> arg [0 ],
791+ fcinfo -> arg [1 ],
792+ fcinfo -> arg [2 ],
793+ fcinfo -> arg [3 ],
794+ fcinfo -> arg [4 ],
795+ fcinfo -> arg [5 ],
796+ fcinfo -> arg [6 ],
797+ fcinfo -> arg [7 ],
798+ fcinfo -> arg [8 ],
799+ fcinfo -> arg [9 ],
800+ fcinfo -> arg [10 ],
801+ fcinfo -> arg [11 ],
802+ fcinfo -> arg [12 ],
803+ fcinfo -> arg [13 ],
804+ fcinfo -> arg [14 ],
805+ fcinfo -> arg [15 ]);
740806break ;
741807default :
742808