aboutsummaryrefslogtreecommitdiffstats
path: root/src/estream.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2022-07-28w32: Fix for bidirectional pipe.NIIBE Yutaka1-0/+6
* src/estream.c (func_w32_seek): Return an error with ESPIPE, when it's pipe. -- GnuPG-bug-id: 6112 Signed-off-by: NIIBE Yutaka <[email protected]>
2022-06-28Remove Windows CE support.NIIBE Yutaka1-33/+1
* contrib/*: Remove. * Makefile.am: Remove contrib. * autogen.sh: Remove Windows CE support. * configure.ac (have_w32ce_system): Remove. * src/Makefile.am [HAVE_W32CE_SYSTEM] (extra_cppflags): Remove. (gpg_extra_headers): Remove. (EXTRA_DIST): Remove mkw32errmap.c and w32ce-add.h (BUILT_SOURCES): Remove mkw32errmap.map.c. (tmp_files): Remove mkw32errmap.tab.h mkw32errmap.map.c (CLEANFILES): Likewise. * src/estream-printf.c [HAVE_W32CE_SYSTEM]: Remove. * src/estream.c [HAVE_W32CE_SYSTEM]: Remove. * src/gpg-error.def.in [HAVE_W32CE_SYSTEM]: Remove. * src/gpgrt-int.h: Fix comment. * src/init.c [HAVE_W32CE_SYSTEM]: Remove. * src/init.h [HAVE_W32CE_SYSTEM]: Remove. * src/mkheader.c: Remove Windows CE support. * src/mkw32errmap.c, src/w32ce-add.h: Remove. * src/spawn-posix.c [HAVE_W32CE_SYSTEM]: Remove. * src/spawn-w32.c [HAVE_W32CE_SYSTEM]: Remove. * src/sysutils.c [HAVE_W32CE_SYSTEM]: Remove. * src/w32-estream.c [HAVE_W32CE_SYSTEM]: Remove. * src/w32-reg.c [HAVE_W32CE_SYSTEM]: Remove. * tests/Makefile.am [HAVE_W32CE_SYSTEM]: Remove. -- GnuPG-bug-id: 5912 Signed-off-by: NIIBE Yutaka <[email protected]>
2022-04-04w32: Add ES_SYSHD_SOCK support for gpgrt_sysopen.NIIBE Yutaka1-1/+255
* src/mkheader.c (write_special): Support @SOCKET_t@ substitution. * src/gpgrt-int.h (gpgrt_stream_backend_kind_t): Add BACKEND_SOCK. * src/gpg-error.h.in (struct _gpgrt_syshd): Use @SOCKET_t@. * src/estream.c [HAVE_W32_SYSTEM] (estream_cookie_sock_t): New. [HAVE_W32_SYSTEM] (func_sock_create, func_sock_read): New. [HAVE_W32_SYSTEM] (func_sock_write, func_sock_seek): New. [HAVE_W32_SYSTEM] (func_sock_destroy, func_sock_ioctl): New. [HAVE_W32_SYSTEM] (estream_functions_sock, do_sockopen): New. [HAVE_W32_SYSTEM] (do_sysopen): Call do_sockopen. -- Signed-off-by: NIIBE Yutaka <[email protected]>
2022-03-04w32: Support file names longer than MAX_PATH.Werner Koch1-25/+152
* src/sysutils.c (any8bitchar): Remove. (_gpgrt_fname_to_wchar): New. (_gpgrt_mkdir): Use instead of plain utf8 conversion. (_gpgrt_access): Reimplement using GetFileAttributesW so that long files names are supported. * src/estream.c (_gpgrt_w32_get_last_err_code): New. (func_file_create_w32): New. (_gpgrt_fopen): Handle the "sysopen" mode flag. Support mapping of /dev/null. (_gpgrt_freopen): Support mapping of /dev/null. * src/w32-gettext.c (load_domain): Allow long file names. * src/visibility.c (gpgrt_free_wchar): Make function public. (gpgrt_fname_to_wchar): Ditto. (gpgrt_utf8_to_wchar): Ditto. (gpgrt_wchar_to_utf8): Ditto. * src/w32-add.h (gpgrt_free_wchar): New prototype. (gpgrt_fname_to_wchar): Ditto. (gpgrt_utf8_to_wchar): Ditto. (gpgrt_wchar_to_utf8): Ditto. * src/gpg-error.def.in: Add them here too.
2021-11-04estream: Only include sys/select.h when needed.NIIBE Yutaka1-3/+4
* src/estream.c: The select function is only used when poll is not available. So, let it include the header file only when needed. -- Signed-off-by: NIIBE Yutaka <[email protected]>
2020-08-24Release 1.39libgpg-error-1.39gpgrt-1.39Werner Koch1-1/+1
2020-08-21core,w32: Add UTF-8 support to gpgrt_fopen, gpgrt_mkdir and gpgrt_chdir.Werner Koch1-3/+122
* src/protos.h: New. * src/Makefile.am (libgpg_error_la_SOURCES): Add file. * src/gpgrt-int.h: Include protos.h. * src/sysutils.c (_gpgrt_mkdir) [W32]: Make UTF-8 aware. (_gpgrt_chdir) [W32]: Ditto. * src/w32-gettext.c: Include protos.h. (utf8_to_wchar): Allow for strings. (_gpgrt_utf8_to_wchar): New. (_gpgrt_free_wchar): New. * src/estream.c (map_w32_to_errno): Add more error codes. (_gpgrt_w32_set_errno): New. (any8bitchar) [W32]: New helper. (func_file_create) [W32]: Convert file name and use _wopen. -- GnuPG-bug-id: 4083 Signed-off-by: Werner Koch <[email protected]>
2020-06-26estream: Add gpgrt_fcancelWerner Koch1-9/+32
* src/estream.c (do_close): Add arg 'cancel_mode' and chnage all callers. (_gpgrt_fcancel): New. * src/gpg-error.def.in, src/gpg-error.vers: Add function. * src/visibility.c (gpgrt_fcancel): New. * src/gpg-error.h.in (gpgrt_fcancel): New. -- Signed-off-by: Werner Koch <[email protected]>
2019-09-18estream: Care about erroneous case for stream close.NIIBE Yutaka1-10/+5
* src/estream.c (do_list_remove): Only access ITEM->NEXT when it's not null. GnuPG-bug-id: 4698 Signed-off-by: NIIBE Yutaka <[email protected]>
2019-08-23estream: Fix gpgrt_poll at EOF.NIIBE Yutaka1-1/+1
* src/estream.c [HAVE_POLL_H] (_gpgrt_poll): Catch POLLHUP event for want_read. -- At EOF, here is a difference of semantics between poll(2) and select(2). For poll(2), detection of EOF is an event of POLLHUP, not POLLIN. Fixes-commit: a21a7de8c2cf986235382e7e04805744f6df116e Signed-off-by: NIIBE Yutaka <[email protected]>
2019-08-23estream: Fix gpgrt_poll to prevent waiting indefinitely for others.NIIBE Yutaka1-0/+3
* src/estream.c (_gpgrt_poll): Go to leave, when something is ready. Signed-off-by: NIIBE Yutaka <[email protected]>
2019-08-22estream: Fix poll condition.NIIBE Yutaka1-3/+4
* src/estream.c (_gpgrt_poll): Fix for want_oob. Signed-off-by: NIIBE Yutaka <[email protected]>
2019-07-25w32: Fix cast to internal fd.NIIBE Yutaka1-1/+1
* src/estream.c (tmpfd): Use intptr_t. Signed-off-by: NIIBE Yutaka <[email protected]>
2019-07-25estream: Fix IS_INVALID_FD.NIIBE Yutaka1-5/+1
* src/estream.c (IS_INVALID_FD): Simply compare to -1. -- Perhaps, when it was written at first, use of HANDLE was in mind. Now, we have different set of methods for Windows, and this macro is only for integer fd access, no need of ifdef/endif. Signed-off-by: NIIBE Yutaka <[email protected]>
2019-06-27estream: Add missing malloc check.Werner Koch1-1/+6
* src/estream.c (_gpgrt_poll): Check for malloc error. Signed-off-by: Werner Koch <[email protected]>
2019-06-26estream: Don't use variable length array.NIIBE Yutaka1-1/+7
* src/estream.c [HAVE_POLL_H] (_gpgrt_poll): No VLA. -- Fixes-commit: a21a7de8c2cf986235382e7e04805744f6df116e Signed-off-by: NIIBE Yutaka <[email protected]>
2019-06-26estream: Use poll(2) when available.NIIBE Yutaka1-0/+82
* configure.ac: Detect poll.h. * src/estream.c [HAVE_POLL_H] (_gpgrt_poll): Use poll. -- Here, we use C99 feature of array declaration with variable. Signed-off-by: NIIBE Yutaka <[email protected]>
2019-01-04core: New functions gpgrt_abort and gpgrt_add_emergency_cleanup.Werner Koch1-9/+8
* src/init.c (emergency_cleanup_list): New gloabl var. (_gpgrt_add_emergency_cleanup): New. (_gpgrt_abort): New. Repalce all calls to abort by this. Also replace all assert by either log_assert or a stderr output followed by a _gpgrt_abort. (run_emergency_cleanup): New. * src/visibility.c (gpgrt_add_emergency_cleanup): New public API. (gpgrt_abort): New public API. -- Libgcrypt uses its own assert function which makes sure to terminate the secure memory. This is safe as log as an assert is triggered internally in Libgcrypt. GnuPG runs emergency cleanup handlers right before log_fatal etc to tell Libgcrypt to terminate the secure memory. With the move of the logging function to gpgrt in gnupg 2.3 this did not anymore. Thus we now provide a mechanism in gpgrt to do right that. Eventually Libgcrypt can also make use of this. What this does not handle are calls to abort or failed asserts in external libraries or in libc. We can't do anything about it in a library because a library may not setup signal handlers. Signed-off-by: Werner Koch <[email protected]>
2018-11-26core: New functions gpgrt_fprintf_sf anf gpgrt_fprintf_sf_unlocked.Werner Koch1-5/+8
* src/gpg-error.h.in (gpgrt_string_filter_t): New type. (gpgrt_fprintf_sf, gpgrt_fprintf_sf_unlocked): New. * src/gpg-error.vers, src/gpg-error.def.in: Add them. * src/visibility.c (gpgrt_fprintf_sf): New. (gpgrt_fprintf_sf_unlocked): New. * src/estream-printf.c (pr_string): Add and use args sf, sfvalue and string_no. (do_format): Add args sf and sfvalue. Keep a string format counter. (_gpgrt_estream_format): Add args sf and sfvalue. Change all callers to provide NULL for them. * src/estream.c (_gpgrt_vfprintf_unlocked, _gpgrt_vfprintf): Add sf and sfvalue and adjust all callers. (do_print_stream): Ditto. * tests/t-printf.c (stream_to_string): New. (struct sfstate_s): New. (string_filter): New. (check_fprintf_sf): New. (main): Call new test. -- The actual reason to implement these functions is to enhance the internal logging function with a filter to sanitized strings so that control values or other things can be quoted. Signed-off-by: Werner Koch <[email protected]>
2018-11-26core: Add a limited version of gpgrt_ftruncate.Werner Koch1-0/+31
* src/gpg-error.h.in (gpgrt_ftruncate, es_ftruncate): New. * src/gpg-error.def.in, src/gpg-error.vers: Add gpgrt_ftruncate. * src/visibility.c (gpgrt_ftruncate): new. * src/gpgrt-int.h (COOKIE_IOCTL_TRUNCATE): New. * src/estream.c (func_mem_ioctl): Support new internal IOCTL. (_gpgrt_ftruncate): New. -- Right now the ftruncate works only on memory streams. Can easily be added to other stream times. Signed-off-by: Werner Koch <[email protected]>
2018-07-12estream: Always propagate flush event to cookie functions.Werner Koch1-3/+4
* src/estream.c (flush_stream): Always call cookie's flush func. Signed-off-by: Werner Koch <[email protected]>
2018-04-30core: Fix gpgrt_poll for Windows under nPth.Werner Koch1-0/+2
* src/estream.c (_gpgrt_poll) [W32]: Use syscall clamp. Signed-off-by: Werner Koch <[email protected]>
2018-02-21doc: Typo fixes.Werner Koch1-1/+1
--
2017-11-29core: Unify syscall_clamp functions.Werner Koch1-92/+32
* src/estream.c (_gpgrt_set_syscall_clamp) (_gpgrt_get_syscall_clamp): Move to ... * src/syscall-clamp.c: new file. (_gpgrt_pre_syscall, _gpgrt_post_syscall): New. * src/Makefile.am (libgpg_error_la_SOURCES): Add that file. * src/estream.c: Replace the syscall wrapper with the new functions. * src/posix-lock.c: Ditto. * src/w32-lock.c: Ditto. * src/posix-thread.c: Ditto. * src/w32-thread.c: Ditto. Signed-off-by: Werner Koch <[email protected]>
2017-05-31Align 'es_poll' semantics closer with POSIX.Justus Winter1-3/+0
* src/estream.c (_gpgrt_poll): Do not return early if some streams are found to be ready before even polling the others. -- POSIX mandates that all streams are examined and returning early violates that. It also imposes an order on how the callee serves the streams, which might be incompatible with the order the callee wants to serve them, leading to deadlocks. Signed-off-by: Justus Winter <[email protected]>
2017-05-30Fix memory leak for estream.NIIBE Yutaka1-5/+20
* src/estream.c (do_list_remove): Free the item. (do_close): Free the buffer. Signed-off-by: NIIBE Yutaka <[email protected]>
2017-04-19Minor clean up.NIIBE Yutaka1-2/+2
* src/b64dec.c (_gpgrt_b64dec_proc): Add a comment. * src/estream.c (_gpgrt_fread, _gpgrt_fwrite): Use &&. * src/mkheader.c (xstrdup): Use memcpy as we know length. Signed-off-by: NIIBE Yutaka <[email protected]>
2017-02-28Improve tracing of estream.Werner Koch1-15/+39
* src/gpgrt-int.h (trace_errno): Add new parameter. Adjust all users. * src/init.c (trace_fp, trace_with_errno, trace_missing_lf) (trace_prefix_done): New vars. (_gpgrt_internal_trace_begin): Add arg WITH_ERRNO. Open a trace file on first use. Init new vars. (print_internal_trace_prefix): New. * src/estream.c, src/w32-estream.c: Improve tracing. Signed-off-by: Werner Koch <[email protected]>
2017-02-28w32: Fix gpgrt_poll for Windows.Werner Koch1-6/+0
* src/estream.c (_gpgrt_poll) [W32]: Do not call the syscall clamp. -- The system call clamp may only be used directloy around system calls. We don't need them here because we use independent threads to implement non-blocking behaviour. In fact the clamp may lead to a deadlock. Signed-off-by: Werner Koch <[email protected]>
2017-02-26Use the new tracing ramework for estream.Werner Koch1-9/+76
* src/estream.c: Add trace calls to some functions. * src/w32-estream.c: Replace existing trace calls by the new framework. -- Signed-off-by: Werner Koch <[email protected]>
2017-02-26Rename internal functions of estream.Werner Koch1-90/+91
* src/estream.c (_gpgrt_es_init): Rename to _gpgrt_estream_init. (es_fill): Rename to fill_stream. (es_fflush): Rename to flush_stream. (es_deinitialize): Rename to deinit_stream_obj. (es_create): Rename to create_stream (es_read_nbf): Rename to do_read_nbf. (es_read_lbf): Rename to do_read_lbf. (es_read_fbf): Rename to do_read_fbf. (es_peek): Rename to peek_stream. (es_skip): Rename to skip_stream. (es_print): Rename to do_print_stream. -- The use of the "es_" was confusing. Avoid that. Signed-off-by: Werner Koch <[email protected]>
2017-02-24w32: Do not use the syscall clamps in pollable mode.Werner Koch1-10/+36
* src/estream.c (estream_cookie_w32): Add flag no_syscall_clamp. (func_w32_create): Add arg no_syscall_clamp. (func_w32_read): Do not call pre/post_syscall_clamp when flag is set. (func_w32_write): Ditto. (func_w32_seek): Ditto. (do_w32open): Set NO_SYSCALL_CLAMP in pollable mode. (es_create) [W32]: Make sure that pollable-mode is unly used with the W32 backend. Signed-off-by: Werner Koch <[email protected]>
2017-01-19estream: Correctly set ERRNO to EOPNOTSUPP.Werner Koch1-2/+4
* src/estream.c (es_flush, es_write_nbf): Fix setting of ERRNO to EOPNOTSUPP. Signed-off-by: Werner Koch <[email protected]>
2016-11-12estream: Minor portability fix.Werner Koch1-3/+3
-- A trailing comma in an enum is not groked by all compilers. Binary operation should have their own parentheses to make it clear that a binary operator was meant. Signed-off-by: Werner Koch <[email protected]>
2016-11-12estream: Support 'es_poll' on Windows.Justus Winter1-73/+52
* src/Makefile.am (arch_sources): Add new file. * src/estream.c (O_NONBLOCK): Move to 'gpgrt-int.h'. (BUFFER_BLOCK_SIZE): Likewise. (BUFFER_UNREAD_SIZE): Likewise. (struct notify_list_s, notify_list_t): Likewise. (struct _gpgrt_stream_internal, estream_internal_t): Likewise. (X_POLLABLE): New macro. (parse_mode): Parse keyword 'pollable', emulate O_NONBLOCK using the same mechanism on Windows. (_gpgrt_poll): Use the new '_gpgrt_w32_poll' on Windows. * src/gpgrt-int.h (_gpgrt_functions_w32_pollable): New declaration. (_gpgrt_w32_pollable_create): New prototype. (_gpgrt_w32_poll): Likewise. * src/w32-estream.c: New file. This code is adapted from GPGME. * tests/t-poll.c (create_pipe): Create pollable streams. GnuPG-bug-id: 2731 Signed-off-by: Justus Winter <[email protected]>
2016-11-12estream: Track the kind of backend used.Justus Winter1-17/+22
* src/estream.c (struct _gpgrt_stream_internal): Add 'kind'. (init_stream_obj): New parameter 'kind', initialize field. (es_create): New parameter 'kind'. Update all callers. * src/gpgrt-int.h (gpgrt_stream_backend_kind_t): New type. Signed-off-by: Justus Winter <[email protected]>
2016-11-12estream: Rework how the cookie functions are handled.Justus Winter1-49/+49
* src/estream.c (cookie_ioctl_function_t): Move to 'gpgrt-int.h', along with the macros for the IOCTL numbers. (estream_functions_mem): Use the new type and add the ioctl function. (estream_functions_fd): Likewise. (estream_functions_w32): Likewise. (estream_functions_fp): Likewise. (init_stream_object): Use the new type, and also initialize 'func_ioctl'. (es_create): Use the new type. (_gpgrt_fopen): Adapt. (_gpgrt_mopen): Likewise. (_gpgrt_fopenmem): Likewise. (_gpgrt_fopencookie): Likewise. (_gpgrt_fdopen): Likewise. (_gpgrt_fpopen): Likewise. (do_w32open): Likewise. * src/gpgrt-int.h (struct cookie_io_functions_s): New type. Signed-off-by: Justus Winter <[email protected]>
2016-11-12estream: Rework modestring handling.Justus Winter1-46/+44
* src/estream.c (X_SAMETHREAD, X_SYSOPEN): New macros. (parse_mode): Rework how information flows from here to 'es_create'. Instead of using an integer flag per mode, use flags. (init_stream_obj): Adapt accordingly. (es_create): Likewise. (_gpgrt_fopen): Likewise. (_gpgrt_mopen): Likewise. (_gpgrt_fopenmem): Likewise. (_gpgrt_fopencookie): Likewise. (_gpgrt_fdopen): Likewise. (_gpgrt_fpopen): Likewise. (do_w32open): Likewise. (_gpgrt_freopen): Likewise. Signed-off-by: Justus Winter <[email protected]>
2016-11-12Add new interface gpgrt_get_syscall_clamp.Werner Koch1-0/+11
* src/visibility.c (gpgrt_get_syscall_clamp): New. * src/gpg-error.vers, src/gpg-error.def.in: Add function. * src/gpg-error.h.in: Ditto. * src/estream.c (_gpgrt_get_syscall_clamp): New. -- This function can be used by other libraries to set their own system clamp functions. Signed-off-by: Werner Koch <[email protected]>
2016-11-11Use the syscall clamp functions also for lock functionsWerner Koch1-1/+6
* src/posix-lock.c (pre_lock_func, post_lock_func): New. (_gpgrt_lock_set_lock_clamp): New. (_gpgrt_lock_lock): Use clamp functions. * src/w32-lock.c (pre_lock_func, post_lock_func): New. (_gpgrt_lock_set_lock_clamp): New. (_gpgrt_lock_lock): Use clamp functions. * src/posix-lock.c (pre_syscall_func, post_syscall_func): New. (_gpgrt_thread_set_syscall_clamp): New. (_gpgrt_yield): Use clamp functions. * src/w32-lock.c (pre_syscall_func, post_syscall_func): New. (_gpgrt_thread_set_syscall_clamp): New. (_gpgrt_yield): Use clamp functions. * src/estream.c: Include lock.h and thread.h. (do_deinit): Call _gpgrt_lock_set_lock_clamp. (_gpgrt_set_syscall_clamp): Ditto. Signed-off-by: Werner Koch <[email protected]>
2016-10-18estream: Fix modestring parsing.Justus Winter1-1/+1
* src/estream.c (parse_mode): Fix parsing the 'sysopen' flag. Signed-off-by: Justus Winter <[email protected]>
2016-07-05Define EWOULDBLOCK in case it is not definedAndre Heinecke1-0/+5
* src/estream.c (EWOULDBLOCK): Define fallback. -- Older mingw versions (2.0) do not define EWOULDBLOCK in errno.h
2016-06-27estream: Fix bug es_fclose_snatch if a seek has been used.Werner Koch1-1/+1
* src/estream.c (func_mem_ioctl): Set LEN from DATA_LEN. Signed-off-by: Werner Koch <[email protected]>
2016-06-25w32: Silence compiler warnings about redefined macros.Werner Koch1-6/+19
* src/estream.c (S_IRGRP) [W32]: Protect against redefinition. Signed-off-by: Werner Koch <[email protected]>
2016-06-24estream: Remove two compiler warning.Werner Koch1-40/+41
* src/estream.c (func_file_create): Remove dead assignment. (doreadline): Do not decrement SPACE_LEFT before breaking the loop. Add an extra block to limit the scope of that variable. -- Signed-off-by: Werner Koch <[email protected]>
2016-06-15estream: Fix assertion failure due to es_flush.NIIBE Yutaka1-3/+1
* src/estream.c (es_writen): Set writing flag even if no data was written. -- GnuPG-bug-id: 2371 Signed-off-by: Werner Koch <[email protected]> gniibe tracked the problem down to a fully valid change in GnuPG (gnupg commit 12af2630cf4d1a39179179925fac8f2cce7504ff). He wrote: This is the first instance for estream to do READ and WRITE (in the history of the code > 10 years :-). In the [gnupg] function agent_write_private_key, the pattern is: es_fopen es_fread es_fseek es_fwrite which should work well, but if results core dump by assertion failure in the function es_flush of libgpg-error.
2016-06-15Adjust memory limit of es_fopenmem to the block size.Werner Koch1-0/+8
* src/estream.c (func_mem_create): Round up memory limit. -- This is required so that giving a memory limit to es_fopenmem won't fail if it is below the block size. Signed-off-by: Werner Koch <[email protected]>
2016-04-05estream,w32: Temporary fix for gpgrt_poll.Werner Koch1-0/+4
* src/estream.c (_gpgrt_poll) [W32]: Do not use FD_ISSET. -- gpgrt_poll return an error on Windows anyway and thus it does not make sense to use a possible undefined macro here. Reported-by: Andre Heinecke Signed-off-by: Werner Koch <[email protected]>
2016-03-29estream: Prepare for new mode flag "sysopen".Werner Koch1-14/+47
* src/estream.c (parse_mode): Add arg "sysopen". Adjust all callers. Signed-off-by: Werner Koch <[email protected]>
2016-03-29estream: Use simpler names for static functions.Werner Koch1-44/+44
* src/estream.c: Replace all es_func_* to just func_*. Signed-off-by: Werner Koch <[email protected]>