Mercurial > hg > xemacs-beta
comparison modules/postgresql/postgresql.c @ 4952:19a72041c5ed
Mule-izing, various fixes related to char * arguments
-------------------- ChangeLog entries follow: --------------------
modules/ChangeLog addition:
2010-01-26 Ben Wing <ben@xemacs.org>
* postgresql/postgresql.c:
* postgresql/postgresql.c (CHECK_LIVE_CONNECTION):
* postgresql/postgresql.c (print_pgresult):
* postgresql/postgresql.c (Fpq_conn_defaults):
* postgresql/postgresql.c (Fpq_connectdb):
* postgresql/postgresql.c (Fpq_connect_start):
* postgresql/postgresql.c (Fpq_result_status):
* postgresql/postgresql.c (Fpq_res_status):
Mule-ize large parts of it.
2010-01-26 Ben Wing <ben@xemacs.org>
* ldap/eldap.c (print_ldap):
* ldap/eldap.c (allocate_ldap):
Use write_ascstring().
src/ChangeLog addition:
2010-01-26 Ben Wing <ben@xemacs.org>
* alloc.c:
* alloc.c (build_ascstring):
* alloc.c (build_msg_cistring):
* alloc.c (staticpro_1):
* alloc.c (staticpro_name):
* alloc.c (staticpro_nodump_1):
* alloc.c (staticpro_nodump_name):
* alloc.c (unstaticpro_nodump_1):
* alloc.c (mcpro_1):
* alloc.c (mcpro_name):
* alloc.c (object_memory_usage_stats):
* alloc.c (common_init_alloc_early):
* alloc.c (init_alloc_once_early):
* buffer.c (print_buffer):
* buffer.c (vars_of_buffer):
* buffer.c (common_init_complex_vars_of_buffer):
* buffer.c (init_initial_directory):
* bytecode.c (invalid_byte_code):
* bytecode.c (print_compiled_function):
* bytecode.c (mark_compiled_function):
* chartab.c (print_table_entry):
* chartab.c (print_char_table):
* config.h.in:
* console-gtk.c:
* console-gtk.c (gtk_device_to_console_connection):
* console-gtk.c (gtk_semi_canonicalize_console_connection):
* console-gtk.c (gtk_canonicalize_console_connection):
* console-gtk.c (gtk_semi_canonicalize_device_connection):
* console-gtk.c (gtk_canonicalize_device_connection):
* console-stream.c (stream_init_frame_1):
* console-stream.c (vars_of_console_stream):
* console-stream.c (init_console_stream):
* console-x.c (x_semi_canonicalize_console_connection):
* console-x.c (x_semi_canonicalize_device_connection):
* console-x.c (x_canonicalize_device_connection):
* console-x.h:
* data.c (eq_with_ebola_notice):
* data.c (Fsubr_interactive):
* data.c (Fnumber_to_string):
* data.c (digit_to_number):
* device-gtk.c (gtk_init_device):
* device-msw.c (print_devmode):
* device-x.c (x_event_name):
* dialog-msw.c (handle_directory_dialog_box):
* dialog-msw.c (handle_file_dialog_box):
* dialog-msw.c (vars_of_dialog_mswindows):
* doc.c (weird_doc):
* doc.c (Fsnarf_documentation):
* doc.c (vars_of_doc):
* dumper.c (pdump):
* dynarr.c:
* dynarr.c (Dynarr_realloc):
* editfns.c (Fuser_real_login_name):
* editfns.c (get_home_directory):
* elhash.c (print_hash_table_data):
* elhash.c (print_hash_table):
* emacs.c (main_1):
* emacs.c (vars_of_emacs):
* emodules.c:
* emodules.c (_emodules_list):
* emodules.c (Fload_module):
* emodules.c (Funload_module):
* emodules.c (Flist_modules):
* emodules.c (find_make_module):
* emodules.c (attempt_module_delete):
* emodules.c (emodules_load):
* emodules.c (emodules_doc_subr):
* emodules.c (emodules_doc_sym):
* emodules.c (syms_of_module):
* emodules.c (vars_of_module):
* emodules.h:
* eval.c (print_subr):
* eval.c (signal_call_debugger):
* eval.c (build_error_data):
* eval.c (signal_error):
* eval.c (maybe_signal_error):
* eval.c (signal_continuable_error):
* eval.c (maybe_signal_continuable_error):
* eval.c (signal_error_2):
* eval.c (maybe_signal_error_2):
* eval.c (signal_continuable_error_2):
* eval.c (maybe_signal_continuable_error_2):
* eval.c (signal_ferror):
* eval.c (maybe_signal_ferror):
* eval.c (signal_continuable_ferror):
* eval.c (maybe_signal_continuable_ferror):
* eval.c (signal_ferror_with_frob):
* eval.c (maybe_signal_ferror_with_frob):
* eval.c (signal_continuable_ferror_with_frob):
* eval.c (maybe_signal_continuable_ferror_with_frob):
* eval.c (syntax_error):
* eval.c (syntax_error_2):
* eval.c (maybe_syntax_error):
* eval.c (sferror):
* eval.c (sferror_2):
* eval.c (maybe_sferror):
* eval.c (invalid_argument):
* eval.c (invalid_argument_2):
* eval.c (maybe_invalid_argument):
* eval.c (invalid_constant):
* eval.c (invalid_constant_2):
* eval.c (maybe_invalid_constant):
* eval.c (invalid_operation):
* eval.c (invalid_operation_2):
* eval.c (maybe_invalid_operation):
* eval.c (invalid_change):
* eval.c (invalid_change_2):
* eval.c (maybe_invalid_change):
* eval.c (invalid_state):
* eval.c (invalid_state_2):
* eval.c (maybe_invalid_state):
* eval.c (wtaerror):
* eval.c (stack_overflow):
* eval.c (out_of_memory):
* eval.c (print_multiple_value):
* eval.c (issue_call_trapping_problems_warning):
* eval.c (backtrace_specials):
* eval.c (backtrace_unevalled_args):
* eval.c (Fbacktrace):
* eval.c (warn_when_safe):
* event-Xt.c (modwarn):
* event-Xt.c (modbarf):
* event-Xt.c (check_modifier):
* event-Xt.c (store_modifier):
* event-Xt.c (emacs_Xt_format_magic_event):
* event-Xt.c (describe_event):
* event-gtk.c (dragndrop_data_received):
* event-gtk.c (store_modifier):
* event-gtk.c (gtk_reset_modifier_mapping):
* event-msw.c (dde_eval_string):
* event-msw.c (Fdde_alloc_advise_item):
* event-msw.c (mswindows_dde_callback):
* event-msw.c (FROB):
* event-msw.c (emacs_mswindows_format_magic_event):
* event-stream.c (external_debugging_print_event):
* event-stream.c (execute_help_form):
* event-stream.c (vars_of_event_stream):
* events.c (print_event_1):
* events.c (print_event):
* events.c (event_equal):
* extents.c (print_extent_1):
* extents.c (print_extent):
* extents.c (vars_of_extents):
* faces.c (print_face):
* faces.c (complex_vars_of_faces):
* file-coding.c:
* file-coding.c (print_coding_system):
* file-coding.c (print_coding_system_in_print_method):
* file-coding.c (default_query_method):
* file-coding.c (find_coding_system):
* file-coding.c (make_coding_system_1):
* file-coding.c (chain_print):
* file-coding.c (undecided_print):
* file-coding.c (gzip_print):
* file-coding.c (vars_of_file_coding):
* file-coding.c (complex_vars_of_file_coding):
* fileio.c:
* fileio.c (report_file_type_error):
* fileio.c (report_error_with_errno):
* fileio.c (report_file_error):
* fileio.c (barf_or_query_if_file_exists):
* fileio.c (vars_of_fileio):
* floatfns.c (matherr):
* fns.c (print_bit_vector):
* fns.c (Fmapconcat):
* fns.c (add_suffix_to_symbol):
* fns.c (add_prefix_to_symbol):
* frame-gtk.c:
* frame-gtk.c (Fgtk_window_id):
* frame-x.c (def):
* frame-x.c (x_cde_transfer_callback):
* frame.c:
* frame.c (Fmake_frame):
* gc.c (show_gc_cursor_and_message):
* gc.c (vars_of_gc):
* glyphs-eimage.c (png_instantiate):
* glyphs-eimage.c (tiff_instantiate):
* glyphs-gtk.c (gtk_print_image_instance):
* glyphs-msw.c (mswindows_print_image_instance):
* glyphs-x.c (x_print_image_instance):
* glyphs-x.c (update_widget_face):
* glyphs.c (make_string_from_file):
* glyphs.c (print_image_instance):
* glyphs.c (signal_image_error):
* glyphs.c (signal_image_error_2):
* glyphs.c (signal_double_image_error):
* glyphs.c (signal_double_image_error_2):
* glyphs.c (xbm_mask_file_munging):
* glyphs.c (pixmap_to_lisp_data):
* glyphs.h:
* gui.c (gui_item_display_flush_left):
* hpplay.c (player_error_internal):
* hpplay.c (myHandler):
* intl-win32.c:
* intl-win32.c (langcode_to_lang):
* intl-win32.c (sublangcode_to_lang):
* intl-win32.c (Fmswindows_get_locale_info):
* intl-win32.c (lcid_to_locale_mule_or_no):
* intl-win32.c (mswindows_multibyte_to_unicode_print):
* intl-win32.c (complex_vars_of_intl_win32):
* keymap.c:
* keymap.c (print_keymap):
* keymap.c (ensure_meta_prefix_char_keymapp):
* keymap.c (Fkey_description):
* keymap.c (Ftext_char_description):
* lisp.h:
* lisp.h (struct):
* lisp.h (DECLARE_INLINE_HEADER):
* lread.c (Fload_internal):
* lread.c (locate_file):
* lread.c (read_escape):
* lread.c (read_raw_string):
* lread.c (read1):
* lread.c (read_list):
* lread.c (read_compiled_function):
* lread.c (init_lread):
* lrecord.h:
* marker.c (print_marker):
* marker.c (marker_equal):
* menubar-msw.c (displayable_menu_item):
* menubar-x.c (command_builder_operate_menu_accelerator):
* menubar.c (vars_of_menubar):
* minibuf.c (reinit_complex_vars_of_minibuf):
* minibuf.c (complex_vars_of_minibuf):
* mule-charset.c (Fmake_charset):
* mule-charset.c (complex_vars_of_mule_charset):
* mule-coding.c (iso2022_print):
* mule-coding.c (fixed_width_query):
* number.c (bignum_print):
* number.c (ratio_print):
* number.c (bigfloat_print):
* number.c (bigfloat_finalize):
* objects-msw.c:
* objects-msw.c (mswindows_color_to_string):
* objects-msw.c (mswindows_color_list):
* objects-tty.c:
* objects-tty.c (tty_font_list):
* objects-tty.c (tty_find_charset_font):
* objects-xlike-inc.c (xft_find_charset_font):
* objects-xlike-inc.c (endif):
* print.c:
* print.c (write_istring):
* print.c (write_ascstring):
* print.c (Fterpri):
* print.c (Fprint):
* print.c (print_error_message):
* print.c (print_vector_internal):
* print.c (print_cons):
* print.c (print_string):
* print.c (printing_unreadable_object):
* print.c (print_internal):
* print.c (print_float):
* print.c (print_symbol):
* process-nt.c (mswindows_report_winsock_error):
* process-nt.c (nt_canonicalize_host_name):
* process-unix.c (unix_canonicalize_host_name):
* process.c (print_process):
* process.c (report_process_error):
* process.c (report_network_error):
* process.c (make_process_internal):
* process.c (Fstart_process_internal):
* process.c (status_message):
* process.c (putenv_internal):
* process.c (vars_of_process):
* process.h:
* profile.c (vars_of_profile):
* rangetab.c (print_range_table):
* realpath.c (vars_of_realpath):
* redisplay.c (vars_of_redisplay):
* search.c (wordify):
* search.c (Freplace_match):
* sheap.c (sheap_adjust_h):
* sound.c (report_sound_error):
* sound.c (Fplay_sound_file):
* specifier.c (print_specifier):
* symbols.c (Fsubr_name):
* symbols.c (do_symval_forwarding):
* symbols.c (set_default_buffer_slot_variable):
* symbols.c (set_default_console_slot_variable):
* symbols.c (store_symval_forwarding):
* symbols.c (default_value):
* symbols.c (defsymbol_massage_name_1):
* symbols.c (defsymbol_massage_name_nodump):
* symbols.c (defsymbol_massage_name):
* symbols.c (defsymbol_massage_multiword_predicate_nodump):
* symbols.c (defsymbol_massage_multiword_predicate):
* symbols.c (defsymbol_nodump):
* symbols.c (defsymbol):
* symbols.c (defkeyword):
* symbols.c (defkeyword_massage_name):
* symbols.c (check_module_subr):
* symbols.c (deferror_1):
* symbols.c (deferror):
* symbols.c (deferror_massage_name):
* symbols.c (deferror_massage_name_and_message):
* symbols.c (defvar_magic):
* symeval.h:
* symeval.h (DEFVAR_SYMVAL_FWD):
* sysdep.c:
* sysdep.c (init_system_name):
* sysdll.c:
* sysdll.c (MAYBE_PREPEND_UNDERSCORE):
* sysdll.c (dll_function):
* sysdll.c (dll_variable):
* sysdll.c (dll_error):
* sysdll.c (dll_open):
* sysdll.c (dll_close):
* sysdll.c (image_for_address):
* sysdll.c (my_find_image):
* sysdll.c (search_linked_libs):
* sysdll.h:
* sysfile.h:
* sysfile.h (DEFAULT_DIRECTORY_FALLBACK):
* syswindows.h:
* tests.c (DFC_CHECK_LENGTH):
* tests.c (DFC_CHECK_CONTENT):
* tests.c (Ftest_hash_tables):
* text.c (vars_of_text):
* text.h:
* tooltalk.c (tt_opnum_string):
* tooltalk.c (tt_message_arg_ival_string):
* tooltalk.c (Ftooltalk_default_procid):
* tooltalk.c (Ftooltalk_default_session):
* tooltalk.c (init_tooltalk):
* tooltalk.c (vars_of_tooltalk):
* ui-gtk.c (Fdll_load):
* ui-gtk.c (type_to_marshaller_type):
* ui-gtk.c (Fgtk_import_function_internal):
* ui-gtk.c (emacs_gtk_object_printer):
* ui-gtk.c (emacs_gtk_boxed_printer):
* unicode.c (unicode_to_ichar):
* unicode.c (unicode_print):
* unicode.c (unicode_query):
* unicode.c (vars_of_unicode):
* unicode.c (complex_vars_of_unicode):
* win32.c:
* win32.c (mswindows_report_process_error):
* window.c (print_window):
* xemacs.def.in.in:
BASIC IDEA: Further fixing up uses of char * and CIbyte *
to reflect their actual semantics; Mule-izing some code;
redoing of the not-yet-working code to handle message translation.
Clean up code to handle message-translation (not yet working).
Create separate versions of build_msg_string() for working with
Ibyte *, CIbyte *, and Ascbyte * arguments. Assert that Ascbyte *
arguments are pure-ASCII. Make build_msg_string() be the same
as build_msg_ascstring(). Create same three versions of GETTEXT()
and DEFER_GETTEXT(). Also create build_defer_string() and
variants for the equivalent of DEFER_GETTEXT() when building a
string. Remove old CGETTEXT(). Clean up code where GETTEXT(),
DEFER_GETTEXT(), build_msg_string(), etc. was being called and
introduce some new calls to build_msg_string(), etc. Remove
GETTEXT() from calls to weird_doc() -- we assume that the
message snarfer knows about weird_doc(). Remove uses of
DEFER_GETTEXT() from error messages in sysdep.c and instead use
special comments /* @@@begin-snarf@@@ */ and /* @@@end-snarf@@@ */
that the message snarfer presumably knows about.
Create build_ascstring() and use it in many instances in place
of build_string(). The purpose of having Ascbyte * variants is
to make the code more self-documenting in terms of what sort of
semantics is expected for char * strings. In fact in the process
of looking for uses of build_string(), much improperly Mule-ized
was discovered.
Mule-ize a lot of code as described in previous paragraph,
e.g. in sysdep.c.
Make the error functions take Ascbyte * strings and fix up a
couple of places where non-pure-ASCII strings were being passed in
(file-coding.c, mule-coding.c, unicode.c). (It's debatable whether
we really need to make the error functions work this way. It
helps catch places where code is written in a way that message
translation won't work, but we may well never implement message
translation.)
Make staticpro() and friends take Ascbyte * strings instead of
raw char * strings. Create a const_Ascbyte_ptr dynarr type
to describe what's held by staticpro_names[] and friends,
create pdump descriptions for const_Ascbyte_ptr dynarrs, and
use them in place of specially-crafted staticpro descriptions.
Mule-ize certain other functions (e.g. x_event_name) by correcting
raw use of char * to Ascbyte *, Rawbyte * or another such type,
and raw use of char[] buffers to another type (usually Ascbyte[]).
Change many uses of write_c_string() to write_msg_string(),
write_ascstring(), etc.
Mule-ize emodules.c, emodules.h, sysdll.h.
Fix some un-Mule-ized code in intl-win32.c.
A comment in event-Xt.c and the limitations of the message
snarfer (make-msgfile or whatever) is presumably incorrect --
it should be smart enough to handle function calls spread over
more than one line. Clean up code in event-Xt.c that was
written awkwardly for this reason.
In config.h.in, instead of NEED_ERROR_CHECK_TYPES_INLINES,
create a more general XEMACS_DEFS_NEEDS_INLINE_DECLS to
indicate when inlined functions need to be declared in
xemacs.defs.in.in, and make use of it in xemacs.defs.in.in.
We need to do this because postgresql.c now calls qxestrdup(),
which is an inline function.
Make nconc2() and other such functions MODULE_API and put
them in xemacs.defs.in.in since postgresql.c now uses them.
Clean up indentation in lread.c and a few other places.
In text.h, document ASSERT_ASCTEXT_ASCII() and
ASSERT_ASCTEXT_ASCII_LEN(), group together the stand-in
encodings and add some more for DLL symbols, function and
variable names, etc.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Tue, 26 Jan 2010 23:22:30 -0600 |
parents | 8b63e21b0436 |
children | 304aebb79cd3 |
comparison
equal
deleted
inserted
replaced
4951:de60897044f4 | 4952:19a72041c5ed |
---|---|
116 #define PG_OS_CODING Qnative | 116 #define PG_OS_CODING Qnative |
117 #endif | 117 #endif |
118 Lisp_Object Vpg_coding_system; | 118 Lisp_Object Vpg_coding_system; |
119 #endif | 119 #endif |
120 | 120 |
121 #define CHECK_LIVE_CONNECTION(P) do { \ | 121 #define CHECK_LIVE_CONNECTION(P) \ |
122 if (!P || (PQstatus (P) != CONNECTION_OK)) { \ | 122 do \ |
123 const char *e = "bad value"; \ | 123 { \ |
124 if (P) e = PQerrorMessage (P); \ | 124 if (!P || (PQstatus (P) != CONNECTION_OK)) \ |
125 signal_ferror (Qprocess_error, "dead connection [%s]", e); \ | 125 { \ |
126 } } while (0) | 126 const Ibyte *err; \ |
127 #define PUKE_IF_NULL(p) do { \ | 127 \ |
128 if (!p) signal_error (Qinvalid_argument, "bad value", Qunbound); \ | 128 if (P) \ |
129 } while (0) | 129 err = NEW_EXTERNAL_TO_C_STRING (PQerrorMessage (P), PG_OS_CODING); \ |
130 else \ | |
131 err = (const Ibyte *) "bad value"; \ | |
132 signal_ferror (Qprocess_error, "dead connection [%s]", err); \ | |
133 } \ | |
134 } \ | |
135 while (0) | |
136 | |
137 #define PUKE_IF_NULL(p) \ | |
138 do \ | |
139 { \ | |
140 if (!p) signal_error (Qinvalid_argument, "bad value", Qunbound); \ | |
141 } \ | |
142 while (0) | |
130 | 143 |
131 static Lisp_Object VXPGHOST; | 144 static Lisp_Object VXPGHOST; |
132 static Lisp_Object VXPGUSER; | 145 static Lisp_Object VXPGUSER; |
133 static Lisp_Object VXPGOPTIONS; | 146 static Lisp_Object VXPGOPTIONS; |
134 static Lisp_Object VXPGPORT; | 147 static Lisp_Object VXPGPORT; |
336 PQresStatus (PQresultStatus (res)), | 349 PQresStatus (PQresultStatus (res)), |
337 PQcmdTuples (res), | 350 PQcmdTuples (res), |
338 PQcmdStatus (res)); | 351 PQcmdStatus (res)); |
339 break; | 352 break; |
340 default: | 353 default: |
341 notuples: | 354 notuples: |
342 /* No counts to print */ | 355 /* No counts to print */ |
343 sprintf (buf, RESULT_DEFAULT_FMT, /* evil! */ | 356 sprintf (buf, RESULT_DEFAULT_FMT, /* evil! */ |
344 PQresStatus (PQresultStatus (res)), | 357 PQresStatus (PQresultStatus (res)), |
345 PQcmdStatus (res)); | 358 PQcmdStatus (res)); |
346 break; | 359 break; |
429 Lisp_Object temp, temp1; | 442 Lisp_Object temp, temp1; |
430 int i; | 443 int i; |
431 | 444 |
432 pcio = PQconndefaults(); | 445 pcio = PQconndefaults(); |
433 if (!pcio) return Qnil; /* can never happen in libpq-7.0 */ | 446 if (!pcio) return Qnil; /* can never happen in libpq-7.0 */ |
434 temp = list1 (Fcons (build_ext_string (pcio[0].keyword, PG_OS_CODING), | 447 temp = |
435 Fcons (build_ext_string (pcio[0].envvar, PG_OS_CODING), | 448 list1 (nconc2 (list4 (build_ext_string (pcio[0].keyword, PG_OS_CODING), |
436 Fcons (build_ext_string (pcio[0].compiled, PG_OS_CODING), | 449 build_ext_string (pcio[0].envvar, PG_OS_CODING), |
437 Fcons (build_ext_string (pcio[0].val, PG_OS_CODING), | 450 build_ext_string (pcio[0].compiled, PG_OS_CODING), |
438 Fcons (build_ext_string (pcio[0].label, PG_OS_CODING), | 451 build_ext_string (pcio[0].val, PG_OS_CODING)), |
439 Fcons (build_ext_string (pcio[0].dispchar, PG_OS_CODING), | 452 list3 (build_ext_string (pcio[0].label, PG_OS_CODING), |
440 Fcons (make_int (pcio[0].dispsize), Qnil)))))))); | 453 build_ext_string (pcio[0].dispchar, PG_OS_CODING), |
454 make_int (pcio[0].dispsize)))); | |
441 | 455 |
442 for (i = 1; pcio[i].keyword; i++) | 456 for (i = 1; pcio[i].keyword; i++) |
443 { | 457 { |
444 temp1 = list1 (Fcons (build_ext_string (pcio[i].keyword, PG_OS_CODING), | 458 temp1 = |
445 Fcons (build_ext_string (pcio[i].envvar, PG_OS_CODING), | 459 list1 (nconc2 (list4 (build_ext_string (pcio[i].keyword, PG_OS_CODING), |
446 Fcons (build_ext_string (pcio[i].compiled, PG_OS_CODING), | 460 build_ext_string (pcio[i].envvar, PG_OS_CODING), |
447 Fcons (build_ext_string (pcio[i].val, PG_OS_CODING), | 461 build_ext_string (pcio[i].compiled, PG_OS_CODING), |
448 Fcons (build_ext_string (pcio[i].label, PG_OS_CODING), | 462 build_ext_string (pcio[i].val, PG_OS_CODING)), |
449 Fcons (build_ext_string (pcio[i].dispchar, PG_OS_CODING), | 463 list3 (build_ext_string (pcio[i].label, PG_OS_CODING), |
450 Fcons (make_int (pcio[i].dispsize), Qnil)))))))); | 464 build_ext_string (pcio[i].dispchar, PG_OS_CODING), |
465 make_int (pcio[i].dispsize)))); | |
451 { | 466 { |
452 Lisp_Object args[2]; | 467 Lisp_Object args[2]; |
453 args[0] = temp; | 468 args[0] = temp; |
454 args[1] = temp1; | 469 args[1] = temp1; |
455 /* Fappend GCPROs its arguments */ | 470 /* Fappend GCPROs its arguments */ |
470 */ | 485 */ |
471 (conninfo)) | 486 (conninfo)) |
472 { | 487 { |
473 PGconn *P; | 488 PGconn *P; |
474 Lisp_PGconn *lisp_pgconn; | 489 Lisp_PGconn *lisp_pgconn; |
475 const char *error_message = "Out of Memory?"; | 490 const Ascbyte *error_message = "Out of Memory?"; |
476 char *c_conninfo; | 491 Extbyte *c_conninfo; |
477 | 492 |
478 CHECK_STRING (conninfo); | 493 CHECK_STRING (conninfo); |
479 | 494 |
480 TO_EXTERNAL_FORMAT(LISP_STRING, conninfo, | 495 LISP_STRING_TO_EXTERNAL (conninfo, c_conninfo, PG_OS_CODING); |
481 C_STRING_ALLOCA, c_conninfo, Qnative); | |
482 P = PQconnectdb (c_conninfo); | 496 P = PQconnectdb (c_conninfo); |
483 if (P && (PQstatus (P) == CONNECTION_OK)) | 497 if (P && (PQstatus (P) == CONNECTION_OK)) |
484 { | 498 { |
485 (void)PQsetNoticeProcessor (P, xemacs_notice_processor, NULL); | 499 (void)PQsetNoticeProcessor (P, xemacs_notice_processor, NULL); |
486 lisp_pgconn = allocate_pgconn(); | 500 lisp_pgconn = allocate_pgconn (); |
487 lisp_pgconn->pgconn = P; | 501 lisp_pgconn->pgconn = P; |
488 return make_pgconn (lisp_pgconn); | 502 return make_pgconn (lisp_pgconn); |
489 } | 503 } |
490 else | 504 else |
491 { | 505 { |
492 /* Connection failed. Destroy the connection and signal an error. */ | 506 /* Connection failed. Destroy the connection and signal an error. */ |
493 char buf[BLCKSZ]; | 507 Ibyte *errmsg = (Ibyte *) error_message; |
494 strcpy (buf, error_message); | |
495 if (P) | 508 if (P) |
496 { | 509 { |
497 /* storage for the error message gets erased when call PQfinish */ | 510 /* storage for the error message gets erased when call PQfinish */ |
498 /* so we must temporarily stash it somewhere */ | 511 /* so we must temporarily stash it somewhere -- make alloca() copy */ |
499 strncpy (buf, PQerrorMessage (P), sizeof (buf)); | 512 errmsg = NEW_EXTERNAL_TO_C_STRING (PQerrorMessage (P), PG_OS_CODING); |
500 buf[sizeof (buf) - 1] = '\0'; | 513 IBYTE_STRING_TO_ALLOCA (errmsg, errmsg); |
501 PQfinish (P); | 514 PQfinish (P); |
502 } | 515 } |
503 signal_ferror (Qprocess_error, "libpq: %s", buf); | 516 signal_ferror (Qprocess_error, "libpq: %s", errmsg); |
504 } | 517 } |
505 } | 518 } |
506 | 519 |
507 /* PQconnectStart Makes a new asynchronous connection to a backend. | 520 /* PQconnectStart Makes a new asynchronous connection to a backend. |
508 PGconn *PQconnectStart(const char *conninfo) | 521 PGconn *PQconnectStart(const char *conninfo) |
515 */ | 528 */ |
516 (conninfo)) | 529 (conninfo)) |
517 { | 530 { |
518 PGconn *P; | 531 PGconn *P; |
519 Lisp_PGconn *lisp_pgconn; | 532 Lisp_PGconn *lisp_pgconn; |
520 const char *error_message = "Out of Memory?"; | 533 const Ascbyte *error_message = "Out of Memory?"; |
521 char *c_conninfo; | 534 Extbyte *c_conninfo; |
522 | 535 |
523 CHECK_STRING (conninfo); | 536 CHECK_STRING (conninfo); |
524 TO_EXTERNAL_FORMAT (LISP_STRING, conninfo, | 537 |
525 C_STRING_ALLOCA, c_conninfo, Qnative); | 538 LISP_STRING_TO_EXTERNAL (conninfo, c_conninfo, PG_OS_CODING); |
526 P = PQconnectStart (c_conninfo); | 539 P = PQconnectStart (c_conninfo); |
527 | 540 |
528 if (P && (PQstatus (P) != CONNECTION_BAD)) | 541 if (P && (PQstatus (P) != CONNECTION_BAD)) |
529 { | 542 { |
530 (void)PQsetNoticeProcessor (P, xemacs_notice_processor, NULL); | 543 (void)PQsetNoticeProcessor (P, xemacs_notice_processor, NULL); |
531 lisp_pgconn = allocate_pgconn(); | 544 lisp_pgconn = allocate_pgconn (); |
532 lisp_pgconn->pgconn = P; | 545 lisp_pgconn->pgconn = P; |
533 | 546 |
534 return make_pgconn (lisp_pgconn); | 547 return make_pgconn (lisp_pgconn); |
535 } | 548 } |
536 else | 549 else |
1044 case PGRES_BAD_RESPONSE: return Qpgres_bad_response; | 1057 case PGRES_BAD_RESPONSE: return Qpgres_bad_response; |
1045 case PGRES_NONFATAL_ERROR: return Qpgres_nonfatal_error; | 1058 case PGRES_NONFATAL_ERROR: return Qpgres_nonfatal_error; |
1046 case PGRES_FATAL_ERROR: return Qpgres_fatal_error; | 1059 case PGRES_FATAL_ERROR: return Qpgres_fatal_error; |
1047 default: | 1060 default: |
1048 /* they've added a new field we don't know about */ | 1061 /* they've added a new field we don't know about */ |
1049 signal_ferror (Qprocess_error, "Help! Unknown exec status code %08x from backend!", est); | 1062 signal_ferror (Qprocess_error, |
1063 "Help! Unknown exec status code %08x from backend!", | |
1064 est); | |
1050 } | 1065 } |
1051 } | 1066 } |
1052 | 1067 |
1053 DEFUN ("pq-res-status", Fpq_res_status, 1, 1, 0, /* | 1068 DEFUN ("pq-res-status", Fpq_res_status, 1, 1, 0, /* |
1054 Return stringified result status of the query. | 1069 Return stringified result status of the query. |