diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2008-03-12 15:41:50 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2008-03-12 15:41:50 +0300 |
commit | edab6053a24d49f3443fbfdbac2c330caf50b030 (patch) | |
tree | d1b6a47a9305a66c02b67ce3a57e8005cec93f13 /winsup/cygwin/include | |
parent | 674310fb403f78ecf8fab1bcfdb169cf7ff95390 (diff) |
* winsup.h (NT_MAX_PATH): Revert ill-advised change to 32767.
Accommodate change throughout.
* cygwin.din (cygwin_conv_path): Export.
(cygwin_conv_path_list): Export.
(cygwin_create_path): Export.
* dcrt0.cc (dll_crt0_1): Use cygwin_conv_path.
* dtable.cc (handle_to_fn): Ditto. Don't expect UNICODE_STRING being
0-terminated.
* environ.cc (env_plist_to_posix): New helper function.
(env_plist_to_win32): Ditto.
(env_path_to_posix): Ditto.
(env_path_to_win32): Ditto.
(return_MAX_PATH): Remove.
(conv_envvars): Use new helper functions. Drop removed members.
(win_env::operator =): Accommodate removal of path length functions.
(win_env::add_cache): Accommodate new env helper function API.
(posify): Ditto.
* environ.h (struct win_env): Ditto. Remove path length function
pointers since they are unused.
* path.cc (warn_msdos): Use cygwin_conv_path.
(getfileattr): Use new tmp_pathbuf::u_get method.
(fillout_mntent): Ditto.
(symlink_info::check): Ditto.
(path_conv::check): Use sizeof (WCHAR) instead of constant 2.
(symlink_info::check_reparse_point): Ditto.
(conv_path_list): Get max size of target string as argument. Call
cygwin_conv_path as helper function.
(cygwin_conv_path): New function.
(cygwin_create_path): New function.
(cygwin_conv_to_win32_path): Just call cygwin_conv_path with size set
to MAX_PATH.
(cygwin_conv_to_full_win32_path): Ditto.
(cygwin_conv_to_posix_path): Ditto.
(cygwin_conv_to_full_posix_path): Ditto.
(conv_path_list_buf_size): Add FIXME comment.
(env_PATH_to_posix): Rename from env_win32_to_posix_path_list.
Add size argument as required for env helper functions.
(cygwin_win32_to_posix_path_list): Call conv_path_list with size set to
MAX_PATH.
(cygwin_posix_to_win32_path_list): Ditto.
(cygwin_conv_path_list): New function.
(cwdstuff::get): Fix length argument in call to sys_wcstombs.
* spawn.cc (find_exec): Use cygwin_conv_path_list.
* tls_pbuf.h (tmp_pathbuf::u_get: New method.
* uinfo.cc (cygheap_user::ontherange): Allocate temporary path buffers
using tmp_pathbuf. Use cygwin_conv_path.
* winf.cc (av::unshift): Use cygwin_conv_path.
* include/cygwin/version.h: Bump API minor number.
* include/sys/cygwin.h: Comment out old cygwin32_XXX API.
Mark old path handling API as deprecated.
(cygwin_conv_path_t): Typedef. Define values.
(cygwin_conv_path): Declare.
(cygwin_create_path): Declare.
(cygwin_conv_path_list): Declare.
Diffstat (limited to 'winsup/cygwin/include')
-rw-r--r-- | winsup/cygwin/include/cygwin/version.h | 3 | ||||
-rw-r--r-- | winsup/cygwin/include/sys/cygwin.h | 65 |
2 files changed, 59 insertions, 9 deletions
diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index da6f3ceae..afad4beba 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -323,12 +323,13 @@ details. */ 180: Export getxattr, lgetxattr, fgetxattr, listxattr, llistxattr, flistxattr, setxattr, lsetxattr, fsetxattr, removexattr, lremovexattr, fremovexattr. + 181: Export cygwin_conv_path, cygwin_create_path, cygwin_conv_path_list. */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 180 +#define CYGWIN_VERSION_API_MINOR 181 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible diff --git a/winsup/cygwin/include/sys/cygwin.h b/winsup/cygwin/include/sys/cygwin.h index 51247e54a..26daf0f7c 100644 --- a/winsup/cygwin/include/sys/cygwin.h +++ b/winsup/cygwin/include/sys/cygwin.h @@ -20,6 +20,7 @@ extern "C" { #define _CYGWIN_SIGNAL_STRING "cYgSiGw00f" +#if 0 /* ENTIRELY DEPRECATED INTERFACES. */ extern pid_t cygwin32_winpid_to_pid (int); extern void cygwin32_win32_to_posix_path_list (const char *, char *); extern int cygwin32_win32_to_posix_path_list_buf_size (const char *); @@ -31,16 +32,64 @@ extern void cygwin32_conv_to_posix_path (const char *, char *); extern void cygwin32_conv_to_full_posix_path (const char *, char *); extern int cygwin32_posix_path_list_p (const char *); extern void cygwin32_split_path (const char *, char *, char *); +#endif + +/* DEPRECATED INTERFACES. These are restricted to MAX_PATH length. + Don't use in modern applications. */ +extern int cygwin_win32_to_posix_path_list (const char *, char *) + __attribute__ ((deprecated)); +extern int cygwin_win32_to_posix_path_list_buf_size (const char *) + __attribute__ ((deprecated)); +extern int cygwin_posix_to_win32_path_list (const char *, char *) + __attribute__ ((deprecated)); +extern int cygwin_posix_to_win32_path_list_buf_size (const char *) + __attribute__ ((deprecated)); +extern int cygwin_conv_to_win32_path (const char *, char *) + __attribute__ ((deprecated)); +extern int cygwin_conv_to_full_win32_path (const char *, char *) + __attribute__ ((deprecated)); +extern int cygwin_conv_to_posix_path (const char *, char *) + __attribute__ ((deprecated)); +extern int cygwin_conv_to_full_posix_path (const char *, char *) + __attribute__ ((deprecated)); + +/* Use these interfaces in favor of the above. */ + +/* Possible 'what' values in calls to cygwin_conv_path/cygwin_create_path. */ +enum +{ + CCP_POSIX_TO_WIN_A = 0, /* from is char*, to is char* */ + CCP_POSIX_TO_WIN_W, /* from is char*, to is wchar_t* */ + CCP_WIN_A_TO_POSIX, /* from is char*, to is char* */ + CCP_WIN_W_TO_POSIX, /* from is wchar_t*, to is char* */ + + /* Or these values to the above as needed. */ + CCP_ABSOLUTE = 0, /* Request absolute path (default). */ + CCP_RELATIVE = 0x100 /* Request to keep path relative. */ +}; +typedef unsigned int cygwin_conv_path_t; + +/* If size is 0, cygwin_conv_path returns the required buffer size in bytes. + Otherwise, it returns 0 on success, or -1 on error and errno is set to + one of the below values: + + EINVAL what has an invalid value. + EFAULT from or to point into nirvana. + ENAMETOOLONG the resulting path is longer than 32K, or, in case + of what == CCP_POSIX_TO_WIN_A, longer than MAX_PATH. + ENOSPC size is less than required for the conversion. +*/ +extern ssize_t cygwin_conv_path (cygwin_conv_path_t what, const void *from, + void *to, size_t size); +/* Same, but handles path lists separated by colon or semicolon. */ +extern ssize_t cygwin_conv_path_list (cygwin_conv_path_t what, const void *from, + void *to, size_t size); +/* Allocate a buffer for the conversion result using malloc(3), and return + a pointer to it. Returns NULL if something goes wrong with errno set + to one of the above values, or to ENOMEM if malloc fails. */ +extern void *cygwin_create_path (cygwin_conv_path_t what, const void *from); extern pid_t cygwin_winpid_to_pid (int); -extern int cygwin_win32_to_posix_path_list (const char *, char *); -extern int cygwin_win32_to_posix_path_list_buf_size (const char *); -extern int cygwin_posix_to_win32_path_list (const char *, char *); -extern int cygwin_posix_to_win32_path_list_buf_size (const char *); -extern int cygwin_conv_to_win32_path (const char *, char *); -extern int cygwin_conv_to_full_win32_path (const char *, char *); -extern int cygwin_conv_to_posix_path (const char *, char *); -extern int cygwin_conv_to_full_posix_path (const char *, char *); extern int cygwin_posix_path_list_p (const char *); extern void cygwin_split_path (const char *, char *, char *); |