aboutsummaryrefslogtreecommitdiff
path: root/winsup
AgeCommit message (Collapse)AuthorFilesLines
2025-08-30Cygwin: Note Ctrl-O (FLUSHO) fix to release noteHEADmastermainTakashi Yano1-0/+3
2025-08-30Cygwin: pty: Fix FLUSHO handlingTakashi Yano5-13/+12
Previsouly, FLUSHO did not work correctly. 1) Even when FLUSHO is set, read() returns with undesired data in the pipe if select() is called in advance. 2) FLUSHO is toggled even in the case pseudo console enabled. Due to these problems, read data in the pty master was partially lost when Ctrl-O is pressed. With this patch, the mask_flusho flag, that was introduced by the commit 9677efcf005a and caused the issue 1), has been dropped and select() and read() for pty master discards the pipe data instead if FLUSHO flag is set. In addition, FLUSHO handling in the case pseudo console activated is disabled. Addresses: https://cygwin.com/pipermail/cygwin/2025-August/258717.html Fixes: 2cab4d0bb4af ("Cygwin: pty, console: Refactor the code processing special keys.") Fixes: 9677efcf005a ("Cygwin: pty: Make FLUSHO and Ctrl-O work.") Reported-by: Reported-by: Thomas Wolff <towo@towo.net> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-08-18Cygwin: fix finding overlaps from F_SETLKW.Jeremy Drake1-1/+1
The commit adding OFD locks changed from comparing just the F_POSIX and F_LOCK flags to comparing the entire flags value in order to make sure the locks are of the same type. However, the F_WAIT flag may or may not be set, and result in that comparison not matching. Mask the F_WAIT flag when attempting to compare the types of the locks. This fixes the "many_locks" stc. Signed-off-by: Jeremy Drake <cygwin@jdrake.com> Fixes: a66ed519884d ("Cygwin: fcntl: implement Open File Description (OFD) locks")
2025-08-18Cygwin: fix fcntl F_GETLKJeremy Drake1-0/+1
The commit implementing OFD locks dropped the F_GETLK case from the switch in fhandler_base::lock, replacing it with F_OFD_GETLK. This appears to have been an oversight, as F_OFD_SETLK was added as an additional case above. This resulted in the winsup.api/ltp/fcntl05 test failing. Fixes: a66ed519884d ("Cygwin: fcntl: implement Open File Description (OFD) locks") Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-08-18Cygwin: spawn: Make ch_spwan_local be initialized properlyTakashi Yano4-4/+12
The class child_info_spawn has two constructors: one without arguments and one with two arguments. The former does not initialize any members. Commit 1f836c5f7394 used the latter to ensure that the local ch_spawn (i.e., ch_spawn_local) would be properly initialized. However, this was insufficient - it initialized only the base child_info members, not the fields specific to child_info_spawn. This led to the issue reported in https://cygwin.com/pipermail/cygwin/2025-August/258660.html. This patch introduces a new constructor to properly initialize member variable 'ev', etc., which were referred without initialization, and switches ch_spawn_local to use it. 'subproc_ready', which may not be initialized, is also initialized in the constructor of the base class child_info. Addresses: https://cygwin.com/pipermail/cygwin/2025-August/258660.html Fixes: 1f836c5f7394 ("Cygwin: spawn: Make system() thread-safe") Reported-by: Denis Excoffier <cygwin@Denis-Excoffier.org> Reviewed-by: Jeremy Drake <cygwin@jdrake.com> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-08-05Cygwin: add release note for new C++ wrappers.Jeremy Drake1-0/+3
Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-08-05Cygwin: fcntl: implement Open File Description (OFD) locksCorinna Vinschen3-38/+66
Partially quoting the LINUX man page: Open file description locks are advisory byte-range locks whose opera‐ tion is in most respects identical to the traditional record locks de‐ scribed above. The principal difference between the two lock types is that whereas tra‐ ditional record locks are associated with a process, open file descrip‐ tion locks are associated with the open file description on which they are acquired, much like locks acquired with flock(2). Consequently (and unlike traditional advisory record locks), open file description locks are inherited across fork(2) (and clone(2) with CLONE_FILES), and are only automatically released on the last close of the open file descrip‐ tion, instead of being released on any close of the file. Conflicting lock combinations (i.e., a read lock and a write lock or two write locks) where one lock is an open file description lock and the other is a traditional record lock conflict even when they are acquired by the same process on the same file descriptor. Just like traditional advisory record locks, OFD locks do not conflict with BSD file locks acquired with flock(2). Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-08-04Cygwin: fcntl: define F_OFD flagCorinna Vinschen1-0/+1
This will be used by a followup patch to denote OFD locks per POSIX. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-08-04Cygwin: fcntl: move lock types definition to fcntl.h headerCorinna Vinschen2-4/+6
This is in preparation for implementing OFD locks per POSIX. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-08-04Cygwin: file locking: always use and expect explicit lock variantCorinna Vinschen2-4/+10
So far, not setting a lock variant (F_POSIX/F_FLOCK) defaulted to F_POSIX locks. Adding OFD locks in a followup patch may lead to confusion, so make sure that the lock variant is always set in the calling functions (fcntl, flock, lockf). Bail out with EINVAL if no lock variant is set. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-08-04Cygwin: add api version check to c++ malloc struct override.Jeremy Drake3-19/+26
This prevents memory corruption if a newer app or dll is used with an older cygwin dll. This is an unsupported scenario, but it's still a good idea to avoid corrupting memory if possible. Fixes: 7d5c55faa1 ("Cygwin: add wrappers for newer new/delete overloads") Co-authored-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-07-31Cygwin: bump API version for addition of new/delete wrappersJeremy Drake1-1/+2
Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-07-30Cygwin: add wrappers for newer new/delete overloadsJeremy Drake5-5/+299
A sized delete (with a std::size_t parameter) was added in C++14 (but doesn't combine with nothrow_t) An aligned new/delete (with a std::align_val_t parameter) was added in C++17, and combinations with the sized delete and nothrow_t variants. Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-07-25Cygwin: mkimport: implement AArch64 +/-4GB relocationsRadek Bartoň2-11/+30
Based on https://sourceware.org/pipermail/cygwin-patches/2025q3/014154.html suggestion, this patch implements +/-4GB relocations for AArch64 in the mkimport script by using adrp and ldr instructions. This change required update in winsup/cygwin/mm/malloc_wrapper.cc where those instructions are decoded to get target import address. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-24Cygwin: Fix handling of archetype fhandler in process_fdTakashi Yano3-0/+7
Previously, process_fd failed to correctly handle fhandlers using an archetype. This was due to the missing PATH_OPEN flag in path_conv, which caused build_fh_pc() to skip archetype initialization. The root cause was a bug where open() did not set the PATH_OPEN flag for fhandlers using an archetype. This patch introduces a new method, path_conv::set_isopen(), to explicitly set the PATH_OPEN flag in path_flags in fhandler_base:: open_with_arch(). Addresses: https://cygwin.com/pipermail/cygwin/2025-May/258167.html Fixes: 92ddb7429065 ("(build_pc_pc): Use fh_alloc to create. Set name from fh->dev if appropriate. Generate an archetype or point to one here.") Reported-by: Christian Franke <Christian.Franke@t-online.de> Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-07-24Cygwin: Add UTF-8 surrogate fix to release messagesCorinna Vinschen1-0/+7
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-24Cygwin: _sys_wcstombs: add FIXME commentCorinna Vinschen1-1/+10
Add a FIXME comment to the conversion of private use area bytes to "normal" bytes in _sys_wcstombs detailing the conversion difference between _sys_wcstombs and standard wcstombs. It might be a good idea to drop the conversion to gather compatibility with wcstombs. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-24Cygwin: _sys_mbstowcs: fix handling invalid 4-byte UTF-8 sequencesCorinna Vinschen1-4/+47
When a 4 byte utf-8 sequence has an invalid 4th byte, it's actually an invalid 3 byte sequence. In this case we already generated the high surrogate and only realize the problem when byte 4 doesn't match. At this point _sys_mbstowcs transposes the invalid 4th byte into the private use area. This is wrong. The invalid byte sequence here is the 3 byte sequence already converted to a high surrogate, not the trailing 4th byte. Fix this by backtracking to the start of the broken sequence and overwrite the already written high surrogate with a sequence of the original three bytes transposed to the private use area. Reset the mbstate and restart normal conversion at the non-matching 4th byte, which might start a new multibyte sequence. The resulting wide-char string can be converted back to multibyte and back again to wide-char, and the result will be identical, even if the multibyte sequence differs from the original sequence. Fixes: e44b9069cd227 ("* strfuncs.cc (sys_cp_mbstowcs): Treat src as unsigned char *. Convert failure of f_mbtowc into a single malformed utf-16 value.") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-23Cygwin: Add recent fixes to release note 3.6.5Takashi Yano1-0/+7
2025-07-23Cygwin: spawn: Make system() thread-safeTakashi Yano2-3/+5
POSIX states system() shall be thread-safe, however, it is not in current cygwin. This is because ch_spawn is a global and is shared between threads. With this patch, system() uses ch_spawn_local instead which is local variable. popen() has the same problem, so it has been fixed in the same way. Addresses: https://cygwin.com/pipermail/cygwin/2025-June/258324.html Fixes: 1fd5e000ace5 ("import winsup-2000-02-17 snapshot") Reported-by: Takashi Yano <takashi.yano@nifty.ne.jp> Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-07-23Cygwin: spawn: Lock cygheap from refresh_cygheap() until child_copy()Takashi Yano1-5/+7
...completion in child process because the cygheap should not be changed to avoid mismatch between child_info::cygheap_max and ::cygheap_max. Otherwise, child_copy() might copy cygheap being modified by other process. In addition, to avoid deadlock, move close_all_files() for non- Cygwin processes after unlocking cygheap, since close_all_files() calls cfree(), which attempts to lock cygheap even when it's already locked. Fixes: 977ad5434cc0 ("* spawn.cc (spawn_guts): Call refresh_cygheap before creating a new process to ensure that cygheap_max is up-to-date.") Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-07-23Cygwin: cygheap: Add lock()/unlock() methodTakashi Yano2-6/+11
...so that cygheap can be locked/unlocked from outside of mm/cygheap.cc. Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-07-22Cygwin: doc: add note about raw devices of BitLocker partitionsChristian Franke1-0/+6
Signed-off-by: Christian Franke <christian.franke@t-online.de>
2025-07-21Cygwin: configure: add possibility to skip build of cygserver and utilsRadek Bartoň4-3/+48
This patch adds configure options allowing to disable build of cygserver and Cygwin utilities. This is useful when one needs to build only cygwin1.dll and crt0.o with stage1 compiler that is not yet capable of linking executables as it is missing cygwin1.dll and crt0.o. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-18Cygwin: clocks: read leap secs from /etc/leapsecs on older systemsCorinna Vinschen1-49/+39
Systems prior to W10 1803 don't have the leapsecs registry key HKLM\SYSTEM\CurrentControlSet\Control\LeapSecondInformation and don't handle leap seconds at all. Given that new leap seconds are a rather seldom, irregular event, drop reading from /usr/share/zoneinfo/leapseconds. Just read the same leap second records from a file /etc/leapsecs as stored in the LeapSeconds registry value on newer systems instead. As a sidenote, the code reading from /usr/share/zoneinfo/leapseconds was wrong anyway, because it didn't take the timestamps into account. Given IERS publishes new leap seconds about 6 months before they occur, CLOCK_TAI would have been one second off for up to 6 months. /etc/leapsecs doesn't exist yet, so we just default to 37 secs. If new leap seconds get provided for newer systems, make sure to provide the /etc/leapsecs file as part of the Cygwin distro with identical entries. Fixes: 2abb929f0ad2 ("Cygwin: clocks: Implement CLOCK_TAI") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-18Cygwin: sys/termios.h: define struct winsize before using itCorinna Vinschen2-8/+10
Long-standing bug in the sys/termios.h file which, for some reason, has never been encountered before. STC: #include <sys/termios.h> int main() { struct winsize win; tcgetwinsize (0, &win); } Result with gcc 12.4.0: termios-bug.c: In function ‘main’: termios-bug.c:7:20: warning: passing argument 2 of ‘tcgetwinsize’ from incompatible pointer type [-Wincompatible-pointer-types] 7 | tcgetwinsize (0, &win); | ^~~~ | | | struct winsize * In file included from termios-bug.c:1: /usr/include/sys/termios.h:304:42: note: expected ‘struct winsize *’ but argument is of type ‘struct winsize *’ 304 | int tcgetwinsize(int fd, struct winsize *winsz); | ~~~~~~~~~~~~~~~~^~~~~ This warning apparently becomes an error with C23. The reason is that struct winsize is defined in sys/termios.h after using it as argument type in function declarations. From the compil;er perspective it's now a different type , regardless of having the same name. Move declaration of struct winsize up so it's defined before being used. Reported-by: Zachary Santer <zsanter@gmail.com> Suggested-by: Zachary Santer <zsanter@gmail.com> Addresses: https://cygwin.com/pipermail/cygwin/2025-July/258474.html Fixes: 1fd5e000ace55 ("import winsup-2000-02-17 snapshot") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-17Cygwin: clocks: read leap seconds from registryCorinna Vinschen1-7/+73
Windows 10 1803 introduced leap seconds support in 2018. The OS always starts at 37 leap secs. Additional leap second timestamps are added to the registry key HKLM\SYSTEM\CurrentControlSet\Control\LeapSecondInformation, value LeapSeconds. If the key exists, read the leap second timestamps from this value, otherwise fallback to reading /usr/share/zoneinfo/leapseconds. Note that we might change the file we read from yet, but that's no part of this patch. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-17Cygwin: reg_key: add a method get_binary() to fetch REG_BINARY dataCorinna Vinschen2-0/+41
This patch is required for a followup patch fetching the leap seconds info from the registry starting with Windows 10 1803. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-17Cygwin: cygcheck: port to AArch64Radek Bartoň1-3/+11
This patch ports `winsup/utils/mingw/cygcheck.cc` to AArch64: - Adds arch=aarch64 to packages API URL. - Ports dll_info function. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-16Cygwin: testsuite: link cygload with --disable-high-entropy-vaJeremy Drake1-1/+1
This is a mingw program meant to demonstrate loading the Cygwin dll in a non-Cygwin process, but the Cygwin dll still initializes the cygheap on load in that case. Without --disable-high-entropy-va, Windows may occasionally locate the PEB, TEB, and/or stacks in the address space that Cygwin tries to reserve for the cygheap, resulting in a failure. Fixes: 60675f1a7eb2 ("Cygwin: decouple shared mem regions from Cygwin DLL") Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-07-16Cygwin: clocks: Implement CLOCK_TAICorinna Vinschen6-5/+102
CLOCK_TAI is like CLOCK_REALTIME ignoring leap secs. Right now, 2025, it has a positive 37 secs offset from CLOCK_REALTIME. Given the unpredictability of adding leap secs by the IERS (International Earth Rotation and Reference Systems Service), we also add a mechanism to read the current leap secs offset from /usr/share/zoneinfo/leapseconds, part of the tzdata package. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-16Cygwin: add clock bugfixes to 3.6.5 release messageCorinna Vinschen1-0/+4
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-16Cygwin: POSIX timer: handle TIMER_ABSTIME correctly for all realtime clocksCorinna Vinschen1-1/+3
Add CLOCK_REALTIME_COARSE and CLOCK_REALTIME_ALARM to the clocks allowing an absolute timeout value to be used as such in NtSetTimer. Fixes: c05df02725c59 ("Cygwin: implement extensible clock interface") Fixes: 013e2bd9ecf85 ("Cygwin: posix timers: Add support for CLOCK_REALTIME_ALARM/CLOCK_BOOTTIME_ALARM") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-16Cygwin: clocks: use InterlockedCompareExchange64Corinna Vinschen1-6/+3
The clock init functions checked timer ticks/period for 0 and then called InterlockedExchange64 if the value was still 0. This is not quite as atomic as it was supposed to be. Use InterlockedCompareExchange64 instead. Fixes: 2b72887ac834b ("Cygwin: clocks: fix a hang on pre-Windows 10 machines") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-15Cygwin: doc: Install miscellaneous website filesJon Turney1-3/+7
This gives us a full set of the built documentation files in the install directory, which can then be appropriately filtered for packaging or deploying to website, as required. Again, there will be a separate change to the cygwin packaging to avoid including theses files in the cygwin-doc package. Also, add matching uninstall rules.
2025-07-15Cygwin: doc: Install FAQ as wellJon Turney1-1/+8
We don't currrently deploy the CSS file to the website, because the FAQ doesn't get installed, so instead we copy all the doc files from the build directory. That omits docbook.css, which is installed from directly from the source directory. (We just happen to have a similar file lying around on the webserver). Instead, just install the FAQ. There will be a separate change to the cygwin packaging to avoid including the FAQ in the cygwin-doc package. (I guess we'd rather people go online for that, to ensure they have the latest version?) Also, add matching uninstall rules.
2025-07-14Cygwin: gendef: stub implementations of routines for AArch64Radek Bartoň1-1/+41
This patch aspires to provide only minimal changes to `winsup/cygwin/scripts/gendef` allowing to pass the AArch64 build. It does not provide any implementations of the generated routines. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-14Cygwin: doc: warn about unprivileged access to raw devicesChristian Franke1-1/+9
Raw devices of partitions may be accessible from unprivileged processes, for example if connected via USB. Signed-off-by: Christian Franke <christian.franke@t-online.de>
2025-07-14Cygwin: signal: make context structures registers handling portableRadek Bartoň6-35/+135
This patch extracts macros from winsup/cygwin/exceptions.cc serving for portable register access to context structures into a separate local header winsup/cygwin/local_includes/register.h and implements their AArch64 counterparts. Then, it adds AArch64 declaration of __mcontext structure based on mingw-w64-headers/include/winnt.h header to winsup/cygwin/include/cygwin/singal.h header. Then, it includes the registers.h header and uses the macros where applicable, namely at: - winsup/cygwin/exceptions.cc - winsup/cygwin/profil.c - winsup/cygwin/tread.cc The motivation is to make usage of the context structures portable without unnecessary #if defined(__x86_64__) while implementations of signal handling code will be developed later, e.g. implementation of makecontext. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-14Cygwin: malloc_wrapper: port to AArch64Evgeny Karpov1-0/+14
Implements import_address function by decoding adr AArch64 instructions to get target address. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-14Cygwin: add dummy implementation of _fe_nomask_envRadek Bartoň1-0/+10
_fe_nomask_env is exported by cygwin.din but not used at all for AArch64. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-14Cygwin: dumper: port to AArch64Radek Bartoň1-1/+3
This patch allows to build winsup/utils/dumper.cc for AArch64 by handling target architecture condition in dumper::init_core_dump. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-14Cygwin: profiler: port to AArch64Radek Bartoň1-1/+3
This patch allows to build winsup/utils/profiler.cc for AArch64 by handling target architecture condition in find_text_section function implementation. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-14Cygwin:testsuite: winchild: drop unused variableCorinna Vinschen1-1/+0
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
2025-07-14Cygwin: mkimport: port to support AArch64Radek Bartoň1-0/+11
This patch ports winsup/cygwin/scripts/mkimport script to AArch64, namely implements relocation to the imp_sym. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-14Cygwin: pty: TCIFLUSH also clears readahead buffer in the masterTakashi Yano3-5/+30
Previously, TCIFLUSH flushed the pipe to_slave which transfers input from master to slave. However, this was not sufficiant. The master side holds input data before accept_input() in the read-ahead buffer. So, if input data before 'enter' key can be leaked into slave input after TCIFLUSH. With this patch, TCIFLUSH requests master to flush read-ahead buffer via master control pipe. To realize this, add cmd filed to pipe_request structure so that the flush request can be distinguished from existing pipe handle request. Addresses: https://cygwin.com/pipermail/cygwin/2025-July/258442.html Fixes: 41946df6111b (" (fhandler_tty_slave::tcflush): Implement input queue flushing by calling read with NULL buffer.") Reported-by: Christoph Reiter <reiter.christoph@gmail.com> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
2025-07-11Cygwin: winchild: fix missing stdlib.hRadek Bartoň1-1/+1
The posix_spawn/winchild test was added recently by 2af1914b6ad673a2041cf94cc8e78e1bdec57a27 commit. It fails to build for AArch64 due to missing stdlib.h header where malloc and free functions are defined. This patch fixes the missing header. Signed-off-by: Radek Bartoň <radek.barton@microsoft.com>
2025-07-09Cygwin: testsuite: test posix_spawn_file_actions_addopen with O_CLOEXECJeremy Drake1-0/+10
This was previously not handled correctly by newlib. Signed-off-by: Jeremy Drake <cygwin@jdrake.com>
2025-07-09Cygwin: CI: cygstress: remove 'filerace', 'flock' and 'fork' from CIChristian Franke1-3/+4
The 'filerace' test may run longer than the watchdog timeout. 'flock' and 'fork' may leave processes behind for some unknown reason. Signed-off-by: Christian Franke <christian.franke@t-online.de>
2025-07-08Cygwin: open: only fix file attributes when trying to create fileCorinna Vinschen2-2/+5
Only try to fix the cached DOS attributes if the caller actually tried to create the file. Otherwise the fixup code is called even in cases where we open the file with minimal query access bits and NtQueryInformationFile() could fail with STATUS_ACCESS_DENIED and the new cached DOS attributes are wrong again. Fixes: 37c49decc835f ("Cygwin: open: only fix up cached DOS file attributes for on-disk files") Signed-off-by: Corinna Vinschen <corinna@vinschen.de>