5c30094f48
libstdc++-v3: * configure.host: Remove osf* handling. * config/os/osf: Remove. * doc/xml/manual/using.xml: Remove OSF reference. * testsuite/18_support/pthread_guard.cc: Remove alpha*-*-osf* handling. * testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc: Likewise. * testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. * testsuite/21_strings/basic_string/pthread18185.cc: Likewise. * testsuite/21_strings/basic_string/pthread4.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise. * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise. * testsuite/23_containers/list/pthread1.cc: Likewise. * testsuite/23_containers/list/pthread5.cc: Likewise. * testsuite/23_containers/map/pthread6.cc: Likewise. * testsuite/23_containers/vector/debug/multithreaded_swap.cc: Likewise. * testsuite/27_io/basic_ofstream/pthread2.cc: Likewise. * testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise. * testsuite/30_threads/async/42819.cc: Likewise. * libstdc++-v3/testsuite/30_threads/async/49668.cc: Likewise. * libstdc++-v3/testsuite/30_threads/async/any.cc: Likewise. * libstdc++-v3/testsuite/30_threads/async/async.cc: Likewise. * libstdc++-v3/testsuite/30_threads/async/launch.cc: Likewise. * libstdc++-v3/testsuite/30_threads/async/sync.cc: Likewise. * libstdc++-v3/testsuite/30_threads/call_once/39909.cc: Likewise. * libstdc++-v3/testsuite/30_threads/call_once/49668.cc: Likewise. * libstdc++-v3/testsuite/30_threads/call_once/call_once1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable/members/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable/members/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable/native_handle/typesizes.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable_any/50862.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable_any/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable_any/members/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/condition_variable_any/members/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/cons/move.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/45133.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/get.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/get2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/share.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/valid.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/wait.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/wait_for.cc: Likewise. * libstdc++-v3/testsuite/30_threads/future/members/wait_until.cc: Likewise. * libstdc++-v3/testsuite/30_threads/lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/lock/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/lock/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/lock/4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/lock_guard/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/dest/destructor_locked.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/native_handle/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/native_handle/typesizes.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/try_lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/try_lock/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/mutex/unlock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/49668.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/cons/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/cons/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/cons/move.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/cons/move_assign.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/get_future2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/invoke5.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/reset.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/reset2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/swap.cc: Likewise. * libstdc++-v3/testsuite/30_threads/packaged_task/members/valid.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/cons/move.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/cons/move_assign.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/get_future.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/get_future2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/set_exception.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/set_exception2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/set_value.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/set_value2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/set_value3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/promise/members/swap.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/try_lock/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_mutex/unlock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/lock/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/recursive_timed_mutex/unlock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/cons/move.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/members/45133.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/members/get.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/members/get2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/members/valid.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/members/wait.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/members/wait_for.cc: Likewise. * libstdc++-v3/testsuite/30_threads/shared_future/members/wait_until.cc: Likewise. * libstdc++-v3/testsuite/30_threads/this_thread/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/this_thread/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/this_thread/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/this_thread/4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/49668.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/5.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/6.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/7.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/8.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/9.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/cons/moveable.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/members/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/members/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/members/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/members/4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/members/5.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/members/hardware_concurrency.cc: Likewise. * libstdc++-v3/testsuite/30_threads/thread/swap/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/dest/destructor_locked.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/native_handle/typesizes.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_for/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/try_lock_until/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/timed_mutex/unlock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/try_lock/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/try_lock/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/try_lock/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/try_lock/4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/cons/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/cons/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/cons/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/cons/4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/cons/5.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/cons/6.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/locking/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/locking/2.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/locking/3.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/locking/4.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/1.cc: Likewise. * libstdc++-v3/testsuite/30_threads/unique_lock/modifiers/2.cc: Likewise. * libstdc++-v3/testsuite/ext/rope/pthread7-rope.cc: Likewise. * libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc: Likewise. * libstdc++-v3/testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc: Likewise. libobjc: * configure.ac (enable_objc_gc): Remove alpha*-dec-osf* handling. * configure: Regenerate. * thr.c (_XOPEN_SOURCE): Define unconditionally. libjava: * configure.ac (alpha*-dec-osf*): Remove. * configure: Regenerate. * configure.host (alpha*-dec-osf*): Remove. * gnu/java/net/natPlainDatagramSocketImplPosix.cc (setOption): Use IPV6_MULTICAST_IF unconditionally. * gnu/java/net/natPlainDatagramSocketImplWin32.cc (setOption): Likewise. * gnu/java/net/natPlainSocketImplPosix.cc (gnu::java::net::PlainSocketImpl::accept): Use ::accept instead of _Jv_accept. * include/posix-signal.h [__alpha__ && __osf__]: Remove. * include/posix.h (_POSIX_PII_SOCKET): Don't define. (_Jv_accept): Remove. * java/io/File.java (File._access): Rename to access. Change callers. (File._stat): Likewise. * java/io/File.h: Regenerate. * classpath/lib/java/io/File.class: Regenerate. * java/io/natFilePosix.cc (java::io::File::_access): Rename to access. (java::io::File::_stat): Rename to stat. * java/io/natFileWin32.cc: Likewise. * testsuite/libjava.jni/jni.exp (gcj_jni_get_cxxflags_invocation): Remove alpha*-dec-osf* handling. * testsuite/libjava.jvmti/jvmti-interp.exp (gcj_jni_compile_c_to_so): Likewise. * testsuite/libjava.jvmti/jvmti.exp (gcj_jvmti_compile_cxx_to_o): Likewise. libitm: * configure.tgt (*-*-osf*): Remove. * configure: Regenerate. libgomp: * configure.tgt (alpha*-dec-osf*): Remove. * config/osf/sem.h: Remove. * config/posix/lock.c (_XOPEN_SOURCE): Define unconditionally. libgfortran: * configure.ac: Remove Tru64 reference. * acinclude.m4 (LIBGFOR_GTHREAD_WEAK): Remove alpha*-dec-osf* handling. * configure: Regenerate. * intrinsics/c99_functions.c [__osf__]: Remove. libgcc: * config.host: Remove alpha*-dec-osf5.1* handling. * config/alpha/gthr-posix.c: Remove. * config/alpha/libgcc-osf5.ver: Remove. * config/alpha/osf5-unwind.h: Remove. * config/alpha/t-osf-pthread: Remove. * config/alpha/t-slibgcc-osf: Remove. * config/t-crtfm (crtfastmath.o): Remove -frandom-seed. * gthr-posix.h [!_REENTRANT && __osf__] (_REENTRANT): Don't define. [__osf__ && _PTHREAD_USE_MANGLED_NAMES_]: Remove. * mkmap-flat.awk: Remove osf_export handling. gnattools: * configure.ac: Remove alpha*-dec-osf* handling. * configure: Regenerate. gcc/testsuite: * g++.dg/abi/rtti3.C: Remove alpha*-dec-osf* handling. * g++.dg/abi/thunk4.C: Likewise. * g++.dg/cdce3.C: Don't skip on*-dec-osf5*. Adapt line numbers. * g++.dg/compat/struct-layout-1_generate.c: Remove alpha*-dec-osf* handling. * g++.dg/cpp0x/constexpr-rom.C: Likewise. * g++.dg/eh/spbp.C: Likewise. * g++.dg/ext/label13.C: Likewise. * g++.dg/guality/guality.exp: Likewise. * g++.dg/other/anon5.C: Likewise. * g++.dg/other/pragma-ep-1.C: Remove. * g++.dg/warn/miss-format-1.C: Remove alpha*-dec-osf* handling. * g++.dg/warn/pr31246.C: Likewise. * g++.dg/warn/weak1.C: Likewise. * g++.old-deja/g++.eh/badalloc1.C: Likewise. * g++.old-deja/g++.ext/attrib5.C: Likewise. * gcc.c-torture/compile/limits-declparen.c: Likewise. * gcc.c-torture/compile/limits-pointer.c: Likewise. * gcc.c-torture/execute/20001229-1.c: Remove __osf__ handling. * gcc.dg/attr-weakref-1.c: Remove alpha*-dec-osf* handling. * gcc.dg/c99-stdint-6.c: Remove alpha*-dec-osf5* handling. * gcc.dg/c99-tgmath-1.c: Likewise. * gcc.dg/c99-tgmath-2.c: Likewise. * gcc.dg/c99-tgmath-3.c: Likewise. * gcc.dg/c99-tgmath-4.c: Likewise. * gcc.dg/compat/struct-layout-1_generate.c: Remove alpha*-dec-osf* handling. * gcc.dg/debug/pr49032.c: Likewise. * gcc.dg/guality/guality.exp: Likewise. * gcc.dg/intmax_t-1.c: Likewise. * gcc.dg/pr48616.c: Likewise. * gcc.dg/pragma-ep-1.c: Remove. * gcc.dg/pragma-ep-2.c: Remove. * gcc.dg/pragma-ep-3.c: Remove. * gcc.dg/torture/pr47917.c: Remove alpha*-dec-osf5* handling. * gcc.dg/tree-ssa/pr42585.c: Remove alpha*-dec-osf* handling. * gcc.misc-tests/gcov-14.c: Likewise. * gfortran.dg/guality/guality.exp: Likewise. * lib/target-supports.exp (check_weak_available): Likewise. (add_options_for_tls): Likewise. (check_ascii_locale_available): Likewise. * obj-c++.dg/dwarf-2.mm: Likewise. * objc.dg/dwarf-1.m: Likewise. * objc.dg/dwarf-2.m: Likewise. gcc/c-family: * c-cppbuiltin.c (c_cpp_builtins): Remove #pragma extern_prefix handling. * c-pragma.c (handle_pragma_extern_prefix): Remove. (init_pragma): Don't register extern_prefix. gcc/po: * EXCLUDES (mips-tdump.c, mips-tfile.c): Remove. gcc: * config.gcc (alpha*-dec-osf5.1*): Remove. * config.host (alpha*-dec-osf*): Remove. * configure.ac (*-*-osf*): Remove. (alpha*-dec-osf*): Remove. * configure: Regenerate. * config/alpha/host-osf.c, config/alpha/osf5.h, config/alpha/osf5.opt, config/alpha/va_list.h, config/alpha/x-osf: Remove. * config/alpha/alpha.h (TARGET_LD_BUGGY_LDGP): Remove. * config/alpha/alpha.c (struct machine_function): Update comment. (alpha_start_function): Remove Tru64 UNIX as handling for max_frame_size. * config/alpha/alpha.md ("exception_receiver"): Remove TARGET_LD_BUGGY_LDGP. ("*exception_receiver_2"): Likewise. * except.c (finish_eh_generation): Remove Tru64 reference. * ginclude/stdarg.h [_HIDDEN_VA_LIST]: Don't undef _VA_LIST. * system.h (TARGET_HANDLE_PRAGMA_EXTERN_PREFIX): Poison. * target.def (handle_pragma_extern_prefix): Remove. * Makefile.in (mips-tfile.o-warn): Remove. (ALL_HOST_BACKEND_OBJS): Remove mips-tfile.o, mips-tdump.o. (mips-tfile, mips-tfile.o, mips-tdump, mips-tdump.o): Remove. * mips-tdump.c, mips-tfile.c: Remove. * doc/extend.texi (Symbol-Renaming Pragmas): Remove #pragma extern_prefix. * doc/install.texi (Binaries): Remove Tru64 UNIX reference. (Specific, alpha*-dec-osf5.1): Note removal. * doc/tm.texi.in (Misc, TARGET_HANDLE_PRAGMA_EXTERN_PREFIX): Remove. * doc/tm.texi: Regenerate. * doc/trouble.texi (Cross-Compiler Problems): Remove. gcc/ada: * gcc-interface/Makefile.in (alpha*-dec-osf*): Remove. * a-intnam-tru64.ads, mlib-tgt-specific-tru64.adb, s-mastop-tru64.adb, s-osinte-tru64.adb, s-osinte-tru64.ads, s-taprop-tru64.adb, s-tasinf-tru64.ads, s-taspri-tru64.ads, system-tru64.ads: Remove. * adaint.c (__gnat_number_of_cpus) [__alpha__ && __osf__]: Remove. [IS_CROSS] [!(__alpha__ && __osf__)]: Remove. * env.c [__alpha__ && __osf__]: Remove. * gsocket.h (_OSF_SOURCE): Remove. (HAVE_THREAD_SAFE_GETxxxBYyyy) [__osf__]: Remove. * init.c [__alpha__ && __osf__]: Remove. * link.c [__osf__]: Remove. * s-oscons-tmplt.c [__alpha__ && __osf__]: Remove. [__osf__ && !_SS_MAXSIZE]: Remove. * sysdep.c [__osf__]: Remove. * terminals.c [__alpha__ && __osf__]: Remove. [OSF1]: Remove. * g-traceb.ads: Remove Tru64 reference. * g-trasym.ads: Likewise. * gnat_ugn.texi (Linking a Mixed C++ & Ada Program): Likewise. (Summary of Run-Time Configurations): Likewise. * memtrack.adb: Likewise. fixincludes: * inclhack.def (alpha___extern_prefix): Remove. (alpha___extern_prefix_standards): Remove. (alpha___extern_prefix_sys_stat): Remove. (alpha_bad_lval): Remove. (alpha_pthread): Remove. (alpha_pthread_gcc): Remove. (alpha_pthread_init): Remove. * fixincl.x: Regenerate. * tests/base/pthread.h [ALPHA_PTHREAD_CHECK]: Remove. [ALPHA_PTHREAD_GCC_CHECK]: Remove. [ALPHA_PTHREAD_INIT_CHECK]: Remove. * tests/base/standards.h: Remove. * tests/base/sys/stat.h [ALPHA___EXTERN_PREFIX_SYS_STAT_CHECK]: Remove. * tests/base/testing.h [ALPHA___EXTERN_PREFIX_CHECK]: Remove. [ALPHA_BAD_LVAL_CHECK]: Remove. contrib: * config-list.mk (LIST): Remove alpha-dec-osf5.1. config: * weakref.m4 (GCC_CHECK_ELF_STYLE_WEAKREF): Remove alpha*-dec-osf*. toplevel: * MAINTAINERS (OS Port Maintainers): Remove osf. * configure.ac (enable_libgomp): Remove *-*-osf*. (with_stabs): Remove alpha*-*-osf*. * configure: Regenerate. From-SVN: r185240
510 lines
12 KiB
C++
510 lines
12 KiB
C++
// natFile.cc - Native part of File class for POSIX.
|
|
|
|
/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2008, 2012
|
|
Free Software Foundation
|
|
|
|
This file is part of libgcj.
|
|
|
|
This software is copyrighted work licensed under the terms of the
|
|
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
|
details. */
|
|
|
|
#include <config.h>
|
|
|
|
#include <stdio.h>
|
|
#include <errno.h>
|
|
#include <sys/param.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <fcntl.h>
|
|
#ifdef HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
#endif
|
|
#include <stdlib.h>
|
|
#ifdef HAVE_DIRENT_H
|
|
#include <dirent.h>
|
|
#endif
|
|
#include <string.h>
|
|
#include <utime.h>
|
|
|
|
#include <gcj/cni.h>
|
|
#include <jvm.h>
|
|
#include <java/io/File.h>
|
|
#include <java/io/IOException.h>
|
|
#include <java/util/ArrayList.h>
|
|
#include <java/lang/String.h>
|
|
#include <java/io/FilenameFilter.h>
|
|
#include <java/io/FileFilter.h>
|
|
#include <java/lang/System.h>
|
|
|
|
jboolean
|
|
java::io::File::access (jint query)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
JvAssert (query == READ || query == WRITE || query == EXISTS
|
|
|| query == EXEC);
|
|
#ifdef HAVE_ACCESS
|
|
int mode;
|
|
if (query == READ)
|
|
mode = R_OK;
|
|
else if (query == WRITE)
|
|
mode = W_OK;
|
|
else if (query == EXISTS)
|
|
mode = F_OK;
|
|
else
|
|
mode = X_OK;
|
|
return ::access (buf, mode) == 0;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::stat (jint query)
|
|
{
|
|
if (query == ISHIDDEN)
|
|
return getName()->charAt(0) == '.';
|
|
|
|
#ifdef HAVE_STAT
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
struct stat sb;
|
|
if (::stat (buf, &sb))
|
|
return false;
|
|
|
|
JvAssert (query == DIRECTORY || query == ISFILE);
|
|
jboolean r = S_ISDIR (sb.st_mode);
|
|
return query == DIRECTORY ? r : ! r;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
jlong
|
|
java::io::File::attr (jint query)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
#ifdef HAVE_STAT
|
|
struct stat sb;
|
|
// FIXME: not sure about return value here.
|
|
if (::stat (buf, &sb))
|
|
return 0;
|
|
|
|
JvAssert (query == MODIFIED || query == LENGTH);
|
|
return query == MODIFIED ? (jlong)sb.st_mtime * 1000 : sb.st_size;
|
|
#else
|
|
// There's no good choice here.
|
|
return 23;
|
|
#endif
|
|
}
|
|
|
|
// These two methods are used to maintain dynamically allocated
|
|
// buffers for getCanonicalPath without the overhead of calling
|
|
// realloc every time a buffer is modified. Buffers are sized
|
|
// at the smallest multiple of CHUNKSIZ that is greater than or
|
|
// equal to the desired length. The default CHUNKSIZ is 256,
|
|
// longer than most paths, so in most cases a getCanonicalPath
|
|
// will require only one malloc per buffer.
|
|
|
|
#define CHUNKLOG 8
|
|
#define CHUNKSIZ (1 << CHUNKLOG)
|
|
|
|
static int
|
|
nextChunkSize (int size)
|
|
{
|
|
return ((size >> CHUNKLOG) + ((size & (CHUNKSIZ - 1)) ? 1 : 0)) << CHUNKLOG;
|
|
}
|
|
|
|
static char *
|
|
maybeGrowBuf (char *buf, int *size, int required)
|
|
{
|
|
if (required > *size)
|
|
{
|
|
*size = nextChunkSize (required);
|
|
buf = (char *) _Jv_Realloc (buf, *size);
|
|
}
|
|
return buf;
|
|
}
|
|
|
|
// Return a canonical representation of the pathname of this file. On
|
|
// the GNU system this involves the removal of redundant separators,
|
|
// references to "." and "..", and symbolic links.
|
|
//
|
|
// The conversion proceeds on a component-by-component basis: symbolic
|
|
// links and references to ".." are resolved as and when they occur.
|
|
// This means that if "/foo/bar" is a symbolic link to "/baz" then the
|
|
// canonical form of "/foo/bar/.." is "/" and not "/foo".
|
|
//
|
|
// In order to mimic the behaviour of proprietary JVMs, non-existant
|
|
// path components are allowed (a departure from the normal GNU system
|
|
// convention). This means that if "/foo/bar" is a symbolic link to
|
|
// "/baz", the canonical form of "/non-existant-directory/../foo/bar"
|
|
// is "/baz".
|
|
|
|
jstring
|
|
java::io::File::getCanonicalPath (void)
|
|
{
|
|
jstring path = getAbsolutePath ();
|
|
|
|
int len = JvGetStringUTFLength (path);
|
|
int srcl = nextChunkSize (len + 1);
|
|
char *src = (char *) _Jv_Malloc (srcl);
|
|
JvGetStringUTFRegion (path, 0, path->length(), src);
|
|
src[len] = '\0';
|
|
int srci = 1;
|
|
|
|
int dstl = nextChunkSize (2);
|
|
char *dst = (char *) _Jv_Malloc (dstl);
|
|
dst[0] = '/';
|
|
int dsti = 1;
|
|
|
|
bool fschecks = true;
|
|
|
|
while (src[srci] != '\0')
|
|
{
|
|
// Skip slashes.
|
|
while (src[srci] == '/')
|
|
srci++;
|
|
int tmpi = srci;
|
|
// Find next slash.
|
|
while (src[srci] != '/' && src[srci] != '\0')
|
|
srci++;
|
|
if (srci == tmpi)
|
|
// We hit the end.
|
|
break;
|
|
len = srci - tmpi;
|
|
|
|
// Handle "." and "..".
|
|
if (len == 1 && src[tmpi] == '.')
|
|
continue;
|
|
if (len == 2 && src[tmpi] == '.' && src[tmpi + 1] == '.')
|
|
{
|
|
while (dsti > 1 && dst[dsti - 1] != '/')
|
|
dsti--;
|
|
if (dsti != 1)
|
|
dsti--;
|
|
// Reenable filesystem checking if disabled, as we might
|
|
// have reversed over whatever caused the problem before.
|
|
// At least one proprietary JVM has inconsistencies because
|
|
// it does not do this.
|
|
fschecks = true;
|
|
continue;
|
|
}
|
|
|
|
// Handle real path components.
|
|
dst = maybeGrowBuf (dst, &dstl, dsti + (dsti > 1 ? 1 : 0) + len + 1);
|
|
int dsti_save = dsti;
|
|
if (dsti > 1)
|
|
dst[dsti++] = '/';
|
|
strncpy (&dst[dsti], &src[tmpi], len);
|
|
dsti += len;
|
|
if (fschecks == false)
|
|
continue;
|
|
|
|
#if defined (HAVE_LSTAT) && defined (HAVE_READLINK)
|
|
struct stat sb;
|
|
dst[dsti] = '\0';
|
|
if (::lstat (dst, &sb) == 0)
|
|
{
|
|
if (S_ISLNK (sb.st_mode))
|
|
{
|
|
int tmpl = CHUNKSIZ;
|
|
char *tmp = (char *) _Jv_Malloc (tmpl);
|
|
|
|
while (1)
|
|
{
|
|
tmpi = ::readlink (dst, tmp, tmpl);
|
|
if (tmpi < 1)
|
|
{
|
|
_Jv_Free (src);
|
|
_Jv_Free (dst);
|
|
_Jv_Free (tmp);
|
|
throw new IOException (
|
|
JvNewStringLatin1 ("readlink failed"));
|
|
}
|
|
if (tmpi < tmpl)
|
|
break;
|
|
tmpl += CHUNKSIZ;
|
|
tmp = (char *) _Jv_Realloc (tmp, tmpl);
|
|
}
|
|
|
|
// Prepend the link's path to src.
|
|
tmp = maybeGrowBuf (tmp, &tmpl, tmpi + strlen (&src[srci]) + 1);
|
|
strcpy(&tmp[tmpi], &src[srci]);
|
|
_Jv_Free (src);
|
|
src = tmp;
|
|
srcl = tmpl;
|
|
srci = 0;
|
|
|
|
// Either replace or append dst depending on whether the
|
|
// link is relative or absolute.
|
|
dsti = src[0] == '/' ? 1 : dsti_save;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Something doesn't exist, or we don't have permission to
|
|
// read it, or a previous path component is a directory, or
|
|
// a symlink is looped. Whatever, we can't check the
|
|
// filesystem any more.
|
|
fschecks = false;
|
|
}
|
|
#endif // HAVE_LSTAT && HAVE_READLINK
|
|
}
|
|
dst[dsti] = '\0';
|
|
|
|
// FIXME: what encoding to assume for file names? This affects many
|
|
// calls.
|
|
path = JvNewStringUTF (dst);
|
|
_Jv_Free (src);
|
|
_Jv_Free (dst);
|
|
return path;
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::isAbsolute (void)
|
|
{
|
|
return path->length() > 0 && path->charAt(0) == '/';
|
|
}
|
|
|
|
jobjectArray
|
|
java::io::File::performList (java::io::FilenameFilter *filter,
|
|
java::io::FileFilter *fileFilter,
|
|
java::lang::Class *result_type)
|
|
{
|
|
/* Some systems have dirent.h, but no directory reading functions like
|
|
opendir. */
|
|
#if defined(HAVE_DIRENT_H) && defined(HAVE_OPENDIR)
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
DIR *dir = opendir (buf);
|
|
if (! dir)
|
|
return NULL;
|
|
|
|
java::util::ArrayList *list = new java::util::ArrayList ();
|
|
struct dirent *d;
|
|
while ((d = readdir (dir)) != NULL)
|
|
{
|
|
// Omit "." and "..".
|
|
if (d->d_name[0] == '.'
|
|
&& (d->d_name[1] == '\0'
|
|
|| (d->d_name[1] == '.' && d->d_name[2] == '\0')))
|
|
continue;
|
|
|
|
jstring name = JvNewStringUTF (d->d_name);
|
|
if (filter && ! filter->accept(this, name))
|
|
continue;
|
|
|
|
if (result_type == &java::io::File::class$)
|
|
{
|
|
java::io::File *file = new java::io::File (this, name);
|
|
if (fileFilter && ! fileFilter->accept(file))
|
|
continue;
|
|
|
|
list->add(file);
|
|
}
|
|
else
|
|
list->add(name);
|
|
}
|
|
|
|
closedir (dir);
|
|
|
|
jobjectArray ret = JvNewObjectArray (list->size(), result_type, NULL);
|
|
list->toArray(ret);
|
|
return ret;
|
|
#else /* HAVE_DIRENT_H && HAVE_OPENDIR */
|
|
return NULL;
|
|
#endif /* HAVE_DIRENT_H && HAVE_OPENDIR */
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::performMkdir (void)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
#ifdef HAVE_MKDIR
|
|
return ::mkdir (buf, 0755) == 0;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::setFilePermissions (jboolean enable,
|
|
jboolean ownerOnly,
|
|
jint permissions)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
JvAssert (permissions == READ || permissions == WRITE || permissions == EXEC);
|
|
#if defined (HAVE_STAT) && defined (HAVE_CHMOD)
|
|
mode_t mode = 0;
|
|
|
|
struct stat sb;
|
|
if (::stat (buf, &sb))
|
|
return false;
|
|
|
|
if (ownerOnly)
|
|
{
|
|
if (permissions == READ)
|
|
mode |= S_IRUSR;
|
|
else if (permissions == WRITE)
|
|
mode |= S_IWUSR;
|
|
else if (permissions == EXEC)
|
|
mode |= S_IXUSR;
|
|
}
|
|
else
|
|
{
|
|
if (permissions == READ)
|
|
mode |= (S_IRUSR | S_IRGRP | S_IROTH);
|
|
else if (permissions == WRITE)
|
|
mode |= (S_IWUSR | S_IWGRP | S_IWOTH);
|
|
else if (permissions == EXEC)
|
|
mode |= (S_IXUSR | S_IXGRP | S_IXOTH);
|
|
}
|
|
|
|
if (enable)
|
|
mode = sb.st_mode | mode;
|
|
else
|
|
mode = sb.st_mode & ~mode;
|
|
|
|
if (::chmod(buf, mode) < 0)
|
|
return false;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::performSetReadOnly (void)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
#if defined (HAVE_STAT) && defined (HAVE_CHMOD)
|
|
struct stat sb;
|
|
if (::stat (buf, &sb))
|
|
return false;
|
|
|
|
if (::chmod(buf, sb.st_mode & 0555))
|
|
return false;
|
|
return true;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
JArray< ::java::io::File *>*
|
|
java::io::File::performListRoots ()
|
|
{
|
|
::java::io::File *f = new ::java::io::File (JvNewStringLatin1 ("/"));
|
|
JArray<java::io::File *> *unixroot
|
|
= reinterpret_cast <JArray<java::io::File *>*>
|
|
(JvNewObjectArray (1, &java::io::File::class$, f));
|
|
elements (unixroot) [0] = f;
|
|
return unixroot;
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::performRenameTo (File *dest)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
char *buf2
|
|
= (char *) __builtin_alloca (JvGetStringUTFLength (dest->path) + 1);
|
|
total = JvGetStringUTFRegion (dest->path, 0, dest->path->length(), buf2);
|
|
buf2[total] = '\0';
|
|
|
|
#ifdef HAVE_RENAME
|
|
return ::rename (buf, buf2) == 0;
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::performSetLastModified (jlong time)
|
|
{
|
|
#ifdef HAVE_UTIME
|
|
utimbuf tb;
|
|
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
tb.actime = time / 1000;
|
|
tb.modtime = time / 1000;
|
|
return (::utime (buf, &tb) == 0);
|
|
#else
|
|
return false;
|
|
#endif
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::performCreate (void)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
int fd = ::open (buf, O_CREAT | O_EXCL, 0644);
|
|
|
|
if (fd < 0)
|
|
{
|
|
if (errno == EEXIST)
|
|
return false;
|
|
throw new IOException (JvNewStringLatin1 (strerror (errno)));
|
|
}
|
|
else
|
|
{
|
|
::close (fd);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
jboolean
|
|
java::io::File::performDelete (void)
|
|
{
|
|
char *buf = (char *) __builtin_alloca (JvGetStringUTFLength (path) + 1);
|
|
jsize total = JvGetStringUTFRegion (path, 0, path->length(), buf);
|
|
buf[total] = '\0';
|
|
|
|
#ifdef HAVE_UNLINK
|
|
#ifdef HAVE_RMDIR
|
|
if (! ::rmdir (buf))
|
|
return true;
|
|
if (errno == ENOTDIR)
|
|
#endif // HAVE_RMDIR
|
|
return ::unlink (buf) == 0;
|
|
#endif // HAVE_UNLINK
|
|
return false;
|
|
}
|
|
|
|
void
|
|
java::io::File::init_native ()
|
|
{
|
|
#ifdef MAXPATHLEN
|
|
maxPathLen = MAXPATHLEN;
|
|
#else
|
|
/* Some systems do not have a limit on the length of a file name,
|
|
the GNU system is one such example. */
|
|
maxPathLen = 0;
|
|
#endif
|
|
caseSensitive = true;
|
|
}
|