summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Revert "Fix console clear screen if buffer is full"Kaz Kylheku2017-11-171-22/+13
| | | | | | | | | | | | | | | This reverts commit 99a3f266c15af5bbb9a8cacda63ce11b094c10d1. Unfortunately Corinna's August 3, 2016 is unsatisfactory, and interferes with our patch for the issue cherry picked from cygnal-2.5.2 into cygnal-2.9.0-branch. When the screen-clearing escape sequence ESC[2J is issued material below the cursor is not cleared properly. For instance, in the TXR Lisp listener, the Ctrl-L command fails to clear the screen at all, because it first homes the cursor to the top line of the screen and then issues the clear screen.
* Use Windows values in passwd and HOME env var.Kaz Kylheku2017-11-174-18/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In this patch, the path to the Windows command interpreter is reported in the shell field of struct passwd by getpwent by default rather than "/bin/bash". The value of USERPROFILE is used for the home field rather than "/home/<user>". Also, the HOME environment variable is stuffed with a copy of USERPROFILE. The HOME issue solves the following problem: some OSS programs on Windows, such as Vim, respond to a HOME variable. If it has garbage contents that make no sense like "/home/bob", they don't behave well. * winsup/cygwin/grp.cc (pwdgrp::init_grp): Initialize new pwd_sep member. * winsup/cygwin/passwd.cc (pwdgrp::parse_passwd): Use pwd_sep rather than hard-coded colon. (pwdgrp::init_pwd): Initialize pwd_sep. * winsup/cygwin/pwdgrp.h (class pwdgrp): New member, pwd_sep. * winsup/cygwin/uinfo.cc (cygheap_user::ontherange): Copy value of USERPROFILE into HOME. (pwdgrp::next_num, pwdgrp::fetch_account_from_line): Use pwd_sep rather than ':'. (pwdgrp::next_num, pwdgrp::fetch_account_from_windows): Get real Windows shell as default shell field. Get USERPROFILE as home directory. Use '|' as the field separator because these fields contain colons. Set pwd_sep to '|'.
* Remove env var translation; PATH semicolon separated.Kaz Kylheku2017-11-172-99/+9
| | | | | | | | | | | | | | | * winsup/cygwin/environ.cc (conv_envvars): Static array removed. (conv_start_chars): Likewise. (getwinenv): Function gutted to just return NULL. No environment vars require conversion. (match_first_char): Static function removed. (build_env): Removed logic for eliminating those variables that require donversion, since there are no such variables and the needed functions and arrays are gone. * winsup/cygwin/environ.cc (find_exec): Recognize semicolon as PATH separator.
* Arrange for text mode on stdin, stdout and stderr.Kaz Kylheku2017-11-171-0/+20
| | | | | | * newlib/libc/stdio/findfp.c (__sinit): Add the Cygwin-specific __SCLE (stream convert line endings) flag when calling the std function to initializing the reent structure's _stdin, _stdout and _stderr members.
* Console: integrate end-of-line hack with cursor positioning.Kaz Kylheku2017-11-171-8/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | The previous work for simulating the beyond-right-edge of screen cursor position is incomplete without integrating this into the cursor positioning routines. By making the cursor routines aware of the eat_newline flag, we allow cursor movements to work correctly with regard to this simulated position. * winsup/cygwin/fhandler_console.cc (fhandler_console::cursor_set): If the X position is beyond the right edge of the screen, then set the cursor to the start of the following line, rather than clipping to the right edge, set the eat_newline flag, indicating that the the true position is actually one character beyond the previous line. In all other cases, clear the eat_newline flag. (fhandler_console::cursor_rel): Do not apply the delta vector to the raw Win32 cursor position; call cursor_get and apply it to the virtual cursor position which takes into account the eat_newline flag. (fhandler_console::cursor_get): Take into account the eat_newline flag. If it is set, then report an adjusted position that is one column beyond the end of the previous line.
* Symlink creation defaults to Windows shortcuts.Kaz Kylheku2017-11-171-1/+1
| | | | | * winsup/cygwin/globals.cc (allow_winsymlinks): Change initial value from WSYM_sysfile to WSYM_lnk.
* Respond to CYGNAL environment variable, not CYGWIN.Kaz Kylheku2017-11-171-8/+8
| | | | | | | | | * winsup/cygwin/environ.cc (set_winsymlinks): Refer to CYGNAL variable in diagnostic message. (parse_options): Pass "CYGNAL" to setenv. (_addenv, environ_init): Call parse_options if variable name is "CYGNAL" rather than "CYGWIN". Comments updated. (spenvs): Change CYGWIN_DEBUG to CYGNAL_DEBUG.
* Implement sh -> cmd.exe translation hack.Kaz Kylheku2017-11-161-0/+15
| | | | | * winsup/cygwin/spawn.cc (spawnve): Rewrite /bin/sh -c cmd invocations to use cmd.exe /c cmd instead.
* Default stdio streams to text mode.Kaz Kylheku2017-11-161-2/+2
| | | | | | | | * newlib/libc/stdio/flags.c (__sflags): Enable for Cygwin the piece of code which adds the O_TEXT mode if O_BINARY is not present. And, also, fix that piece of code's incorrect use of the | operator to test a flag instead of &.
* Implement drive-relative paths and per-drive working dir.Kaz Kylheku2017-11-161-2/+42
| | | | | | | | | | | | | | | | | | | | | | * winsup/cygwin/path.cc (normalize_win32_path): When a drive-relative path is normalized, look up the remembered working directory of that drive in the environment. A drive-relative path is, for example, "C:file.txt". Or just "C:", with no component. If there is no path for the drive in the environment, then the root directory is used, and the "C:" part thus becomes "C:\", causing the path to refer to "C:\file.txt". Otherwise the path is inserted, with a backslash, like "C:\users\bob\file.txt". The Windows convention for storing these per-drive paths in the environment is to use environment variables based on drive letters. For instance the path for the C drive is stored in the environment variable "!C:" (bang, letter, colon). The path includes the C:\ prefix. (cwdstuff::override_win32_cwd): Add the behavior of associating the current working directory with its drive (if it is a current working directory based on a drive). For instance if the overriding cwd is "C:\Users", then the "C:\Users" path is stored into the "!C:" environment variable.
* Remove conversion of native paths to POSIX mount points.Kaz Kylheku2017-11-161-74/+1
| | | | | | | | | | | | We don't want the behavior in Cygnal whereby a native path like C:\path\to\app is converted to /app in getcwd and other situations, or C:\random\path is converted to /cygdrive/c/random/path. * winsup/cygwin/mount.cc (mount_info::conv_to_posix_path): Remove entire section of code which scans mount points, mapping native paths to their mount points paths. All we do is "slashify" and exit.
* First steps toward native path handling.Kaz Kylheku2017-11-164-32/+76
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - /proc and /dev are are still available, accessed as proc:/ and dev:/ - All other paths are native, and do not "see" virtual Cygwin items; /cygdrive is just C:\cygdrive (if the current drive is C). - chdir() to a virtual directory like dev:/ or proc:/ results in errno EOPNOTSUPP. * winsup/cygwin/mount.cc (mount_info::conv_to_win32_path): Takes new bool argument, hide_cygwin_virtuals. If true all that the function does is "backslashify" the path. (mount_info::add_item): Special hack inserted here so that we can create the virtual root directory which holds dev and proc and whatnot, and is passed here as "/". We cannot let this go through normalize_posix_path any more because it will turn to C:\. * winsup/cygwin/mount.h (mount_info::conv_to_win32_path): Declaration updated. * winsup/cygwin/path.cc (is_posix_space): New static function: tests for paths in special spaces, currently "dev:/" and "proc:/". Used by normalize_posix_path. (normalize_posix_path): Any path that doesn't satisfy the is_posix_space test is treated as Win32. Since the bulk of the code is now only used for these spaces, the relative path handling is not required and a the corresponding block of code is removed. Paths satisfying is_posix_space are transformed. I.e. the underlying path resolution machine in the path_conv class still recognizes /proc and /dev. It's just that these will not occur, because normalize_posix_path will convert them to references with drive names. (path_conv::check): Pass the is_msdos flag down to mount_info::conv_to_win32_path as the new argument. Thus if normalize_posix_path indicates a native path, this function will hide the virtual spaces. Also, we add PATH_NOPOSIX and PATH_NOACL to the object's path_flags. This is used in chdir. (normalize_win32_path): A small piece of logic works against our plan here: it checks for the leading forward slash on the path, and prevents such paths from being converted to Win32 paths with a drive reference. We eliminate this test, and treat paths unconditionally. (chdir): Here, if the path is not native, we return EOPNOTSUPP. Thus it is impossible to chdir into Cygwin virtual directories like /dev (now referenced as dev:/). They can be listed but not turned into the current directory. Eventually we want chdir to actually set the Win32 current directory of the process; that can't work for virtual dirs. * winsup/cygwin/path.h (path_conv::is_native): New inline accessor which tests for the PATH_NOPOSIX flag.
* Small fixes in get_cmd_exe_path.Kaz Kylheku2017-11-161-11/+13
| | | | | | | | | | * winsup/cygwin/spawn.cc (init_cmd_exe_path): Restructure code to initialize rather than assign nchars. Include backslash in cmd.exe name; then it can be omitted from the size calculation and sprintf. Do not allocate an excess byte for the string. Thanks to user forsvarir of the code review stackechange. Also reformatted to the GNU style used inside Cygwin. (init_cmd_exe_path): Remove spurious whitespace.
* More secure way of obtaining command interpreter.Kaz Kylheku2017-11-163-4/+30
| | | | | | | | | | | | | | | | | | Instead of relying on the COMSPEC environment variable, what we can do is assume that the program is called "cmd.exe", and then look for it in the directory reported by the GetSystemDirectoryA Win32 function in kernel32.dll. * winsup/cygwin/path.h (get_cmd_exe_path): New function declared. * winsup/cygwin/spawn.cc (av::setup): Use get_cmd_exe_path instead of getenv("COMSPEC"). (cmd_exe_path): New static variable. (init_cmd_exe_path): New static function. (get_cmd_exe_path): New function. * winsup/cygwin/syscalls.cc (system, getusershell, popen): Use get_cmd_exe_path instead of getenv("COMSPEC").
* Use COMSPEC env var, not hard-coded CMD.EXE path.Kaz Kylheku2017-11-163-19/+25
| | | | | | | | | | | | | | | | | | | | It is with some reluctance I make this change, due to the security implications of relying on environment variables. But we can't have a hard-coded path. * winsup/cygwin/include/paths.h (_PATH_CMDEXE): Macro removed. * winsup/cygwin/spawn.cc (av::setup): Use COMSPEC environment variable instead of hard-coded path. If missing, bail with errno set to EOPNOTSUPP. * winsup/cygwin/syscalls.cc (system): Use COMSPEC environment variable. If missing, return -1. (getusershell): Eliminate static array of shell names. If shell_index is zero, return value of COMSPEC env var, if it exists, and increment shell_index to 1. (popen): Use COMSPEC and if that is missing, set errno to EOPNOTSUPP and return NULL.
* Fix previous VT100 fix.Kaz Kylheku2017-11-161-11/+11
| | | | | | | | | We must only set or clear the eat_newline flag if we output something. * winsup/cygwin/fhandler_console.cc (fhandler_console::write_normal): Move the flag setting code inside the if statement which performs output.
* Fix spawned process window not foregrounding.Kaz Kylheku2017-11-162-1/+8
| | | | | | | | | | | | | | | | | | | | | | | | This patch addresses an issue whereby the window of a process created with CreateProcess fails to come to the foreground. This occurs when the calling process itself hasn't run any Windows event processing loop. A repro test case is to make a program with a main, and and call CreateProcess to spawn calc.exe or notepad.exe before doing anything else. It turns out that a dummy call to TranslateMessage makes this issue goes away. If such a call is made before CreateProcess, then the spawned process' window comes up in the foreground as expected. * winsup/cygwin/Makefile.in (DLL_IMPORTS): We need to link in user32.dll to call TranslateMessage. Condense the multiple ${shell ...} call repetition with a foreach. * winsup/cygwin/spawn.cc (child_info_spawn::worker): Do the dummy TranslateMessage call before the section of code that calls CreateProcess or CreateProcessAsUser.
* Console: provide VT100-like end-of-line print behavior.Kaz Kylheku2017-11-162-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On the majority of VT100-like terminals, when you print a character in the last column, the cursor sits in a kind of "limbo", as if the cursor position were one column past the edge of the screen. Thus when a line feed is output next, the cursor is then at the start of the next line. The Win32 console write doesn't do this; the cursor position wraps to the start of the next line. If a newline is put out, it translates to an extra newline going to the next-next line. This spoils the behavior of programs which depend on the VT100 behavior. In this patch, the VT100 behavior is simulated as follows. A new flag in the dev_console structure is set when a character is output to the last column. This flag is then observed in order to discard a newline (or rather any character which is mapped mapped to the DWN action). * winsup/cygwin/fhandler.h (class dev_console): New boolean data member, eat_newline. This indicates that if a character is output which moves down to the next line, it should be discarded rather than sent to the console. * winsup/cygwin/fhandler_console.cc (fhandler_console::write_normal): Set the eat_newline flag if the text output ends up at column zero. Honor the eat_newline flag when processing a DWN character, and clear it when processing certain other control characters.
* Report as CYGNAL in uname syscall.Kaz Kylheku2017-11-161-1/+1
| | | | | | | | This allows applications to distinguish whether they are running on the stock Cygwin or Cygnal. * winsup/cygwin/uname.cc (uname): sysname is now filled in with CYGNAL_ prefix rather than CYGWIN_.
* Cygnal apps use cmd.exe, not /bin/sh.Kaz Kylheku2017-11-163-47/+13
| | | | | | | | | | | | | | | | | | | * winsup/cygwin/include/paths.h (_PATH_CMDEXE): New preprocessor symbol. * winsup/cygwin/spawn.cc (av_setup): Use _PATH_CMDEXE rather than "/bin/sh". * winsup/cygwin/syscalls.cc (system): Spawn _PATH_CMDEXE with /c option rather than /bin/sh. (ETC_SHELLS): Preprocessor symbol removed. (shell_fp): Global variable removed. (getusershell): Don't open ETC_SHELLS, just march through static array of shell names. That array contains only one entry: _PATH_CMDEXE. (setusershell, endusershell): Remove references to shell_fp. (popen): Exec _PATH_CMDEXE rather than "/bin/sh", and the option is /c.
* When spawning, don't try to make invisible window.Kaz Kylheku2017-11-161-2/+0
| | | | | | | | | * winsup/cygwin/spawn.cc (child_info_spawn::worker): Do not call fhandler_console::need_invisible. It's not working properly. In an application which has no console because it was compiled -mwindows, calling this funcion causes a visible console window to appear. We don't need this in Cygnal; the Microsoft spawn functions don't pop up such windows.
* Use wShowWindow when calling CreateProcess.Kaz Kylheku2017-11-161-1/+2
| | | | | | * winsup/cygwin/spawn.cc (child_info_spawn::worker): Add STARTF_USESHOWWINDOW to dwFlags of the STARTUPINFOW structure, and set wShowWindow to SW_SHOWNORMAL.
* stdio.h: Don't define unlocked macros using static inline on C++cygwin-2_9_0-releaseCorinna Vinschen2017-09-041-1/+1
| | | | | | | | | | | | In C++, the usage of static inline functions for getchar_unlocked and putchar_unlocked may result in error messages like error: ‘_putchar_unlocked’ was not declared in this scope Fix this by not using the _getchar_unlocked and _putchar_unlocked macros in C++. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* cygwin: Document crypt_rYaakov Selkowitz2017-09-021-0/+1
| | | | Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
* Remove some dangerous advice from the FAQAchim Gratz2017-09-021-4/+8
|
* include: fix ffs, fls guardsYaakov Selkowitz2017-08-301-2/+4
| | | | Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
* newlib: string/Makefile.am (CHEWOUT_FILES): Add strnstr.defCorinna Vinschen2017-08-302-2/+2
| | | | | | Regenerate strings/Makefile.in Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* newlib: strnstr: drop traditional synopisisCorinna Vinschen2017-08-301-7/+0
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add man page entry for strnstr.c.Sichen Zhao2017-08-302-0/+43
|
* Modify strnstr.c.Sichen Zhao2017-08-301-55/+10
|
* cygwin: add strptime %F fix to release notesCorinna Vinschen2017-08-291-0/+3
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* winsup/cygwin/libc/strptime.cc(__strptime) fix %F widthBrian Inglis2017-08-291-2/+4
|
* cygwin: document %s support in strptimeCorinna Vinschen2017-08-292-0/+6
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Fix compile error due to new strnstr()Sebastian Huber2017-08-281-43/+0
| | | | | | | | | | | | | | | Remove local strnstr() implementation to fix compile error: newlib/libc/iconv/lib/aliasesi.c:53:8: error: conflicting types for 'strnstr' _DEFUN(strnstr, (haystack, needle, length), ^ In file included from newlib/libc/iconv/lib/aliasesi.c:29:0: newlib/libc/include/string.h:125:10: note: previous declaration of 'strnstr' was here char *strnstr(const char *, const char *, size_t) __pure; ^~~~~~~ Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* cygwin: export strnstrCorinna Vinschen2017-08-254-3/+5
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* newlib: rebuild string/Makefile.inCorinna Vinschen2017-08-251-27/+49
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Port strnstr.c to newlib.Sichen Zhao2017-08-252-0/+4
|
* Import strnstr.c from FreeBSD.Sichen Zhao2017-08-251-0/+65
|
* Revert "headers: avoid bareword attributes" for clangEric Blake2017-08-251-14/+16
| | | | | | | | | | | | | | | This reverts most of commit 979d467ff6e39ee5c52cf1aac7a6c9c63058141c. We cannot avoid some bareword attributes until clang is fixed to properly support __-decorated attributes; see this bug: https://bugs.llvm.org/show_bug.cgi?id=34319 The macros in question expand to the empty string under gcc, so only compilation under clang is affected, and since clang has the bug, the obvious solution is to roll back the changes, and document the issue. Signed-off-by: Eric Blake <eblake@redhat.com>
* RTEMS: Use __uint64_t for _CLOCK_T_Sebastian Huber2017-08-251-0/+3
| | | | | | | | This addresses: https://devel.rtems.org/ticket/2135 Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* Make _CLOCK_T_ system configurableSebastian Huber2017-08-251-0/+3
| | | | | | | Let systems optionally provide the _CLOCK_T_ type via <machine/_types.h>. Signed-off-by: Sebastian Huber <sebastian.huber@embedded-brains.de>
* newlib/libc/time/strptime.c(strptime_l) add %F %s support for strptimeBrian Inglis2017-08-251-2/+32
|
* winsup/cygwin/libc/strptime.cc(__strptime) add %s support to strptimeBrian Inglis2017-08-251-0/+20
|
* move ILP32 sanity check on heap base code under ARM_RDI_MONITORAlexander Fedotov-B556132017-08-241-4/+5
|
* cygwin: only expose /dev/con{in,out,sole} when started from a Windows consoleCorinna Vinschen2017-08-231-1/+1
| | | | Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* Add myself to RISC-V Port MaintainerKito Cheng2017-08-211-0/+1
|
* Change license to FreeBSD License for RISC-VKito Cheng2017-08-2116-16/+16
| | | | | | - For prevent confuse about what BSD license variant we used, 2- or 3-clause license, we change the license to FreeBSD license to make it unambiguously refers to the 2-clause license.
* Document renameat2Ken Brown2017-08-193-0/+10
|
* cygwin: Implement renameat2Ken Brown2017-08-195-7/+54
| | | | | | Define the RENAME_NOREPLACE flag in <cygwin/fs.h> as defined on Linux in <linux/fs.h>. The other RENAME_* flags defined on Linux are not supported.
* Add RISC-V port for libglossnewlib-snapshot-20170818Kito Cheng2017-08-179-0/+4340
| | | | | | | | Contributor list: - Andrew Waterman <andrew@sifive.com> - Palmer Dabbelt <palmer@dabbelt.com> - Kito Cheng <kito.cheng@gmail.com> - Alex Suykov <alex.suykov@gmail.com>