summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/path.cc
Commit message (Collapse)AuthorAgeFilesLines
...
* * path.cc (normalize_posix_path): Don't eat a '.' after a '\\' since it hasChristopher Faylor2001-10-071-1/+13
| | | | | special meaning on NT. * syscalls.cc (access): Use stat_worker.
* * path.cc (get_raw_device_number): Correct length arguments for wdeveqn.Christopher Faylor2001-10-051-2/+2
|
* * path.cc (getcwd): Allow NULL first argument.Christopher Faylor2001-10-051-1/+1
|
* * path.cc (path_conv::check): Return ENOTDIR when leading device and trailingChristopher Faylor2001-10-051-0/+5
| | | | component.
* * syscalls.cc (stat_worker): Make global. Accept path_conv parameter forChristopher Faylor2001-10-051-18/+21
| | | | | | | | | | | passing information back to caller. * winsup.h: Declare stat_worker. * dir.cc (opendir): Use stat_worker rather than stat and pass path_conv parameter to stat_worker for later inspection. * syslog.cc (syslog): Teach syslog about syslog priorities other than LOG_ERR, LOG_WARNING and LOG_INFO * path.cc (path_conv::check): Don't perform file system or rootdir checks on devices.
* * dcrt0.cc (dll_crt0_1): Don't close hexec_proc if it is NULL.Christopher Faylor2001-10-041-84/+99
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * fork.cc (vfork): Add debugging statements. * path.cc (get_device_number): Make static. Rewrite to inspect both unix and windows paths. (get_raw_device_number): Just check for parts of raw device that we care about. (get_devn): New function, pulled from get_device_number. (win32_device_name): Accomodate arg changes to get_device_number. (mount_info::get_device_number): Call get_device_number on translated Windows path. * spawn.cc (spawn_guts): Don't treat P_VFORK differently from P_NOWAIT. Add handle to child's shared region to child so that it will be preserved if the parent goes away. * fhandler.h: Throughout, simplify to one open method for all fhandler classes, requiring a path_conv first element. * fhandler.cc (fhandler_base::open): Remove obsolete method. Generalize to require path_conv * as first argument. (fhandler_disk_file::open): Remove obsolete method. (fhandler_disk_file::open): Use path_conv pointer rather than reference. * fhandler_clipboard.cc (fhandler_dev_clipboard::dup): Use new open method. (fhandler_dev_clipboard::open): Accomodate new argument for open methods. * fhandler_console.cc (fhandler_console::open): Ditto. (fhandler_console::dup): Use new open method. (fhandler_console::fixup_after_fork): Ditto. (fhandler_console::fixup_after_exec): Ditto. * fhandler_dsp.cc (fhandler_dev_dsp::open): Accomodate new argument for open methods. * fhandler_floppy.cc (fhandler_dev_floppy::open): Ditto. * fhandler_mem.cc (fhandler_dev_mem::open): Ditto. * fhandler_random (fhandler_dev_random::open): Ditto. * fhandler_raw.cc (fhandler_dev_raw::open): Ditto. * fhandler_serial.cc (fhandler_serial::open): Ditto. * fhandler_tape.cc (fhandler_dev_tape::open): Ditto. * fhandler_tty.cc (fhandler_tty_slave::open): Ditto. (fhandler_pty_master::open): Ditto. * fhandler_windows.cc (fhandler_windows::open): Ditto. * fhandler_zero.cc (fhandler_dev_zero::open): Ditto. * fhandler_socket.cc (fhandler_socket::set_connect_secret): Accomodate new argument for open methods. * syscalls.cc (_open): Ditto. (stat_worker): Ditto.
* Add "path.h" include throughout, where needed. Use new path_conv methods andChristopher Faylor2001-10-011-8/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | operators to simplify testing for directory and attributes, throughout. * path.h (path_conv::exists): New method. (path_conv::has_attribute): Ditto. (path_conv::isdir): Ditto. (path_conv::DWORD &): New operator. (path_conv::int &): Ditto. * dir.cc (rmdir): Eliminate a goto. * dtable.cc (dtable::build_fhandler): Accept opt and suffix info for path_conv.check. Return fh == NULL on path_conv error. Pass unit to set_name as appropriate. (dtable::reset_unix_path_name): New method. * dtable.h (dtable): Declare new method. Reflect arg changes to build_fhandler. * fhandler.cc (fhandler_disk_dummy_name): Eliminate. (fhandler_base::set_name): Expect paths to be NULL. Build unix_path_name from win32_path_name when it is a device. (fhandler_base::reset_unix_path_name): New method. (fhandler_base::raw_read): Report EISDIR when ERROR_INVALID_FUNCTION or ERROR_INVALID_PARAMETER and reading a directory. (fhandler_disk_file::fstat): Don't call stat_dev since we should now never be calling fhandler_disk_file methods with devices. (fhandler_base::fhandler_base): Clear {unix,win32}_path_name. (fhandler_base::~fhandler_base): Always free {unix,win32}_path_name. (fhandler_disk_file::fhandler_disk_file): Remove set_no_free_names kludge. (fhandler_disk_file::open): Ditto. * fhandler.h (fhandler_base::no_free_names): Eliminate. (fhandler_base::set_no_free_names): Ditto. * fhandler_tty.cc (fhandler_tty_slave::fhandler_tty_slave): Don't set unix_path_name here. * path.cc (fchdir): Lock fd table throughout. Use new dtable::reset_unix_path_name method to reset path. * syscalls.cc (stat_worker): Reorganize to always call fstat method. Pass path_conv method to fhandler_*::open. (chroot): Elminate a goto.
* * path.cc (symlink): Check arguments for validity.Egor Duda2001-09-161-12/+19
| | | | | | | (getcwd): Ditto. * syscalls.cc (ftruncate): Ditto. * times.cc (times): Ditto. * uname.cc (uname): Ditto.
* * cygheap.h (init_cygheap): Move heap pointers here.Christopher Faylor2001-09-071-1/+1
| | | | | | | | | | | | | | | | | | | * include/sys/cygwin.h (perprocess): Remove heap pointers. * dcrt0.cc (__cygwin_user_data): Reflect obsolete perprocess stuff. (_dll_crt0): Don't initialize heap pointers. (cygwin_dll_init): Ditto. (release_upto): Use heap pointers from cygheap. * heap.h: Ditto. * fork.cc (fork_parent): Ditto. Don't set heap pointers in ch. (fork_child): Remove obsolete sigproc_fixup_after_fork. * shared.cc (memory_init): Reorganize so that cygheap initialization is called prior to regular heap since regular heap uses cygheap now. * sigproc.cc (proc_subproc): Eliminate zombies allocation. (sigproc_init): Move zombies alloation here. Don't free up array on fork, just reuse it. (sigproc_fixup_after_fork): Eliminate. * sigproc.h: Ditto. * include/cygwin/version.h: Reflect change to perprocess structure.
* Move appropriate variables to NO_COPY segment, throughout.Christopher Faylor2001-09-061-1/+1
|
* * cygheap.h (init_cygheap): Move bucket array here from cygheap.cc.Christopher Faylor2001-09-061-1/+1
| | | | | | | | | | | | * cygheap.cc: Throughout use bucket array from cygheap. * sigproc.cc (proc_subproc): Dynamically allocate zombie buffer to save DLL space. (sigproc_fixup_after_fork): Free zombie array after a fork. * sigproc.h (sigproc_fixup_after_fork): Declare. * dir.cc (mkdir): Expand buffer for security descriptor to 4K to avoid stack corruption. * fhandler.cc (fhandler_base::open): Ditto. * path.cc (symlink): Ditto.
* * path.cc (path_conv::check): Avoid splitting off leading '/' in path componentChristopher Faylor2001-08-291-0/+2
| | | | when building a symlink.
* * dir.cc (mkdir): Set security attributes correctly forCorinna Vinschen2001-08-071-4/+10
| | | | | | | | | | CreateDirectoryA () call if ntsec is on. Don't call set_file_attributes () then. * fhandler.cc (fhandler_base::open): Ditto for CreateFileA () call. * path.cc (symlink): Ditto. * security.cc (set_security_attribute): New function. * security.h: Add declaration for `allow_ntea' and `set_security_attribute'.
* * path.cc (fchdir): Set the fhandler's path to absolute value toCorinna Vinschen2001-08-031-0/+19
| | | | | ensure changing to the correct directory even if the fhandler originally points to a relative path.
* Throughout, reorganize header file inclusion to put security.h prior toChristopher Faylor2001-07-261-1/+1
| | | | | | | | fhandler.h. * fhandler.h (fhandler_base::get_inheritance): New method. * fhandler_socket.cc (fhandler_socket::create_secret_event): Use proper close-on-exec inheritance when creating. (fhandler_socket::check_peer_secret_event): Create handle as non-inheritable.
* Change check_null_empty_path* to check_null_empty_str* throughout.Christopher Faylor2001-06-281-23/+6
| | | | | | | | | | | | | | | * path.cc (path_conv::check): Add signal protection here since retrieving info about remote shares can take some time. * path.h (check_null_empty_str_errno): Convert to a function prototype. * path.cc (check_null_empty_str): Move to miscfuncs.cc. * miscfuncs.cc (check_null_empty_str_errno): New function. (__check_null_invalid_struct): Ditto. (__check_null_invalid_struct_errno): Ditto. (check_null_empty_str): Change from VirtualQuery to IsBadWritePtr. * thread.cc (check_valid_pointer): Ditto. * resource.cc (getrlimit): Use check_null_invalid_struct macro for checking validity of pointer. (setrlimit): Ditto.
* * exceptions.cc (sig_handle_tty_stop): Reset PID_STOPPED if not actuallyChristopher Faylor2001-06-161-2/+1
| | | | | | | | | | stopping. * fhandler_console.cc (fhandler_console::fixup_after_fork): Don't set controlling terminal if just inheriting a handle. (fhandler_console::fixup_after_exec): Ditto. * fhandler_tty.cc (fhandler_tty_slave::init): Ditto. * signal.cc (kill_worker): Set appropriate errno if proc_exists determines that process does not really exist.
* * path.cc (path_conv::check): Deal more robustly with foo/ behavior.Christopher Faylor2001-06-151-6/+6
|
* * path.cc (chdir): Fix call to path_conv constructor so that it REALLY doesn'tChristopher Faylor2001-06-111-2/+2
| | | | check for the null/non-empty path.
* * path.cc (path_conv::update_fs_info): Don't consider remote drives to be NTFS.Christopher Faylor2001-06-111-18/+16
| | | | | Set root_dir before invoking GetDriveType (from Kazuhiro Fujieda <fujieda@jaist.ac.jp>). Eliminate extra checks for rootdir.
* * path.cc (chdir): Pre-check path for validity before eating trailing space.Christopher Faylor2001-06-111-7/+26
| | | | Then, ensure that path_conv doesn't check the path for validity again.
* * cygwin.din: Add fchdir symbols.Corinna Vinschen2001-06-101-8/+24
| | | | | | | * path.cc (chdir): Guard against invalid parameter. (fchdir): New function. * include/cygwin/version.h: Bump API minor version to 40. * uinfo.cc (internal_getlogin): Remove unused variable.
* * security.h (NTWriteEA): Change prototype.Egor Duda2001-06-051-19/+95
| | | | | | | | | | | | | | | | | | | * ntea.cc (NTReadEA): Don't check for global ntea setting, now it's caller responsibility. (NTWriteEA): Ditto. * security.cc (get_file_attribute): Read attribute from EA only if 'ntea' is enabled. (set_file_attribute): Ditto. * path.h: (class path_conv): Add members to store file system information. (path_conv::get_drive_type): New function. * syscalls.cc (stat_worker): Use it. * path.cc (path_conv::update_fs_info): New functions. (path_conv::check): Get file system information from device where file resides. On NTFS, try to read symlink contents from EA. (get_symlink_ea): New function. (set_symlink_ea): Ditto. (symlink): Store symlink in extended attribute, if possible.
* * path.cc (normalize_posix_path): Revert .. check removed by previous changes.Christopher Faylor2001-06-041-22/+27
| | | | * cygheap.h: Temporarily declare path_prefix_p here.
* * cygheap.cc (cygheap_root::cygheap_rot): Remove constructor.Christopher Faylor2001-06-031-85/+107
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | (cygheap_root::~cygheap_root): Remove destructor. (cygheap_root::operator =): Remove. (cygheap_root::set): New method. * cygheap.h (cygheap_root): Reflect above changes. Store root info in mount-like structure. (cygheap_root:posix_ok): New method. (cygheap_root::ischroot_native): Ditto. (cygheap_root::unchroot): Ditto. (cygheap_root::exists): Ditto. (cygheap_root::posix_length): Ditto. (cygheap_root::posix_path): Ditto. (cygheap_root::native_length): Ditto. (cygheap_root::native_path): Ditto. * dir.cc (opendir): Remove special chroot test. * path.cc (path_prefix_p): Remove front end. (normalize_posix_path): Reorganize chroot tests to accomodate new convention of allowing paths using posix chroot prefix. (path_conv::check): Pass a "already ran normalize" option to conv_to_win32_path. Return if there is an error from this function. (mount_info::conv_to_win32_path): Add extra argument. Don't call normalize_posix_path if caller has already done so. Substitute chroot setting, if any, for root translation. Add chroot checking to final output step. * shared_info (mount_info): Accomodate additional argument to conv_to_win32_path. * syscalls.cc (chroot): Store both normalized posix path and native path in chroot.
* * path.cc (chdir): Really make sure that isspace gets only an unsigned char.Christopher Faylor2001-06-011-1/+1
|
* * path.cc (chdir): Always send unsigned chars to isspace since newlib's isspaceChristopher Faylor2001-05-311-9/+12
| | | | | | | | | | | | | | | | | | | | doesn't deal well with "negative" chars. * fhandler.cc (fhandler_disk_file::open): Propagate remote status of file garnered from path_conv. Move #! checking to fstat. (fhandler_disk_file::fstat): Reorganize st_mode setting to eliminate duplication. Move check for #! here from fhandler::open. * fhandler.h (fhandler_base::isremote): New method. (fhandler_base::set_isremote): Ditto. (fhandler_base::set_execable_p): Also record "don't care if executable state". (fhandler_base::dont_care_if_execable): New method. * path.cc (path_conv::check): Clear new flags. Appropriately set vol_flags, drive_type, and is_remote_drive. * path.h: Add new flags and methods for manipulating them. * syscalls.cc (_unlink): Use isremote() to determine if a path is remote rather than calling GetDriveType. (stat_worker): Ditto. * security.cc (get_file_attribute): Or attribute with result of NTReadEA to be consistent with get_nt_attribute.
* * path.cc (symlink_info::check): Correctly set 'ext_tacked_on'. Use this toChristopher Faylor2001-05-251-15/+14
| | | | | determine if user specified 'foo.lnk' explicitly. Reorganize slightly to get rid of one goto.
* * path.cc (symlink_info::check): Add a check to return correctlyCorinna Vinschen2001-05-251-1/+1
| | | | if incoming `*.lnk' file is not a symlink.
* * path.cc (slash_drive_prefix_p): Remove.Christopher Faylor2001-05-251-38/+4
| | | | | | | | (mount_info::slash_drive_to_win32_path): Ditto. (mount_info::conv_to_win32_path): Remove slash drive prefix check. (mount_info::add_item): Ditto. (mount_info::del_item): Ditto. * shared_info.h (mount_info): Remove slash_drive_to_win32_path declaration.
* * path.cc (path_conv::check): Revert allow_ntsec check so that volume info isChristopher Faylor2001-05-141-2/+2
| | | | always retrieved and isdisk setting is properly set.
* * external.cc (fillout_pinfo): Use correct pids.Christopher Faylor2001-05-111-1/+3
| | | | | * path.cc (mount_info::conv_to_win32_path): Correct test for whether to include a slash.
* * path.cc (mount_info::conv_to_win32_path): Treat UNC paths the same as pathsChristopher Faylor2001-05-091-1/+1
| | | | including `:' or `\'.
* * cygheap.cc (_cfree): Add regparm attribute.Christopher Faylor2001-05-081-3/+26
| | | | | | | | | | | | | | | | (_crealloc): Ditto. * dcrt0.cc (dll_crt0_1): Default to always checking for executable for now. * dtable.cc (dtable::not_open): Move method. * dtable.h (dtable): Here. * exceptions.cc (ctrl_c_handler): Don't expect process group leader to handle a signal if it doesn't exist. * fhandler.h (fhandler_base): Make openflags protected. * localtime.c (tzsetwall): Check for __CYGWIN__ as well as __WIN32__. * path.cc (path_conv::check): Add some comments. Change strcat to assignment. * lib/_cygwin_S_IEXEC.cc (_cygwin_bob__): Eliminate. * fhandler_tty.cc (fhandler_console::dup): Set controlling terminal if necessary. * fhandler_tty.cc (fhandler_tty_slave::dup): Ditto.
* * exceptions.cc (ctrl_c_handler): Always send signal to process if it has noChristopher Faylor2001-05-041-9/+5
| | | | tty.
* * path.cc (mount_info::conv_to_win32_path): More path tweaking.Christopher Faylor2001-05-011-1/+1
|
* * path.cc (mount_info::conv_to_win32_path): Fix debugging output to avoid aChristopher Faylor2001-05-011-2/+2
| | | | SIGSEGV. Avoid double backslashes in middle of filename.
* * path.cc (mkrelpath): New function.Christopher Faylor2001-05-011-96/+73
| | | | | | | | | | (mount_info::conv_to_win32_path): Eliminate now-unneeded relative path name arg and processing. (path_conv::check): Accomodate relative path names again. Accomodate one extra argument in mount_info::conv_to_win32_path. Tack trailing slash on end of relative path as a side effect, like before. * shared_info.h (mount_info::conv_to_win32_path): Reflect new argument ordering.
* * path.cc (path_conv::check): Don't use path_flags when converting to MS-DOSChristopher Faylor2001-04-301-16/+22
| | | | | syntax unless parsing tail of path component. Stop parsing path when we reach the 'root' of the path. Correctly copy tail to path component.
* * path.cc (symlink_info::check): Remove extra arguments, move functionalityChristopher Faylor2001-04-301-46/+41
| | | | | | | | back to path_conv::check. Clear symlink bit from pflags argument before detecting if this is a symlink. (path_conv::check): Convert posix path here instead of symlink_info::check. Only grab volflags when using ntsec. (symlink_info::check_case): Just replace appropriate part of input path.
* Throughout, change 'tty_attached' to 'real_tty_attached', for clarity.Christopher Faylor2001-04-281-198/+206
| | | | | | | | | | | | | | | | | | | | | | | | | | | Throughout, change 'OutputStopped' to 'output_stopped', for consistency. * dtable.cc (stdio_init): Set controlling tty if not set by stdio opens. * exceptions.cc (ctrl_c_handler): Avoid special pgid checking if no tty is associated with the process. (Suggested by Tim Baker <dbaker@direct.ca>) * external.cc (fillout_pinfo): Return actual tty number for ctty. * fhandler_console.cc (get_tty_stuff): Set ctty when shared memory is allocated. Accept flags input from open(). (set_console_ctty): New function. (fhandler_console::open): Pass flags to get_tty_stuff and rely on this function to set the ctty, if appropriate. * fhandler_termios.cc (fhandler_termios::set_ctty): Move to tty_min class. * fhandler_tty.cc (fhandler_tty_slave::open): Use tc field to access set_ctty(). * tty.h (TTY_CONSOLE): Move to include/sys/cygwin.h. (tty_min): Add set_ctty class here. * include/sys/cygwin.h (TTY_CONSOLE): New home here. * path.cc (symlink_info): Make contents an actual buffer. Pass more flags to case_check. (path_conv::check): Reorganize to do parsing based on posix path rather than native path. (symlink_info::check): Expect posix path as input. Translate to native path here. Accept path_conv flags. Stop parsing if not a symlink regardless of whether previous path was a symlink.
* * shortcut.c (check_shortcut): Close input file handle before returning.Christopher Faylor2001-04-221-19/+21
| | | | | | * path.cc (check_sysfile): Ditto. (symlink_info::check): Rely on opened file handle being closed by symlink checking routines. Set ext_tacked_on when .lnk is detected.
* * path.cc (path_conv::check): Always initialize member variables.Christopher Faylor2001-04-201-5/+7
|
* Throughout, change fdtab references to cygheap->fdtab.Christopher Faylor2001-04-181-0/+1
| | | | | | | | | | | | | | | | | | | | | | | * child_info.h (cygheap_exec_info): Eliminate special fdtab stuff. * spawn.cc (spawn_guts): Ditto. * cygheap.cc (cygheap_init): Initialize fdtab, if appropriate. * cygheap.h (CYGHEAPSIZE): Include size of init_cygheap. (_cmalloc_entry): Include fdtab here. * dtable.h (dtable): Declare/define new methods. * dtable.cc (dtable::vfork_child_fixup): New method. (dtable::fixup_after_exec): Remove unneeded extra arguments. * dcrt0.cc (dll_crt0_1): Ditto. * environ.cc (getwinenv): Use case sensitive comparison. (winenv): Make a copy of environment cache to avoid realloc problems when duplicate environment variables exist in the environment. (From Egor Duda) * net.cc (cygwin_socket): Revert Apr 14 change. * include/sys/file.h: Protect against previous X_OK definition. * passwd.cc: Eliminate passwd_sem throughout. * security.cc: Ditto. * cygwin.din: Export New functions. * passwd.cc (read_etc_passwd): Make race safe. (getpwuid_r): New function. (getpwnam_r): New function.
* * path.h (path_conv::add_ext_from_sym): Declare.Christopher Faylor2001-04-171-4/+1
| | | | * path.cc (path_conv::add_ext_from_sym): Convert to pure inline method.
* * path.cc (windows_device_names): Add missing NULL element.Corinna Vinschen2001-04-171-1/+1
|
* * path.cc (windows_device_names): Move dsp to proper location.Christopher Faylor2001-04-171-1/+1
|
* * path.cc (path_conv::check): Set case_clash even if pcheck_caseCorinna Vinschen2001-04-171-7/+15
| | | | | | | | is set to PCHECK_ADJUST when a case clash is given for the last component in path. (symlink_info::case_check): Ditto. * syscalls.cc (_rename): Avoid overwriting an already existing file if a case clash is given even if pcheck_case is set to PCHECK_ADJUST.
* * path.h (cwdstuff): Move class.Christopher Faylor2001-04-171-33/+9
| | | | | | | | | | | | | | * cygheap.h (cwdstuff): To here. (init_cygheap): Add cwd field. * child_info.h (cygheap_exec_info): Eliminate cwd stuff. (child_info_spawn): Ditto. * dcrt0.cc (dll_crt0_1): Remove cygcwd.fixup_after_exec call. Convert cygcwd reference to cygheap->cwd. * path.cc: Ditto, throughout. (cwdstuff::copy): Eliminate. (cwdstuff::fixup_after_exec): Ditto. * spawn.cc (spawn_guts): Eliminate call to cygcwd.copy. * fhandler.h (FH_OSS_DSP): Move into "fast" device category.
* * autoload.cc: Add winmm functions needed by fhandler_dsp.cc.Christopher Faylor2001-04-161-2/+5
| | | | | | | | | * fhandler_dsp.cc: New file. Implements OSS like /dev/dsp. * include/sys/soundcard.h: New file. User land includes for OSS /dev/dsp. * fhandler.h: Add new class fhandler_dev_dsp and a FH_OSS_DSP definition. * dtable.cc (dtable::build_fhandler): Allow creation of the /dev/dsp device. * path.cc (windows_device_names): Add /dev/dsp into list of device names. * Makefile.in (DLL_OFILES): Add fhandler_dsp.o.