diff options
Diffstat (limited to 'defs')
-rw-r--r-- | defs/gmake.mk | 119 | ||||
-rw-r--r-- | defs/id.def | 1 | ||||
-rw-r--r-- | defs/known_errors.def | 314 |
3 files changed, 254 insertions, 180 deletions
diff --git a/defs/gmake.mk b/defs/gmake.mk index 2c03022434..b34e8420ba 100644 --- a/defs/gmake.mk +++ b/defs/gmake.mk @@ -8,14 +8,12 @@ MSPECOPT += $(if $(filter -j%,$(MFLAGS)),-j) nproc = $(subst -j,,$(filter -j%,$(MFLAGS))) ifeq ($(GITHUB_ACTIONS),true) -override ACTIONS_GROUP = @echo "\#\#[group]$(patsubst yes-%,%,$@)" -override ACTIONS_ENDGROUP = @echo "\#\#[endgroup]" +# 93(bright yellow) is copied from .github/workflows/mingw.yml +override ACTIONS_GROUP = @echo "::group::[93m$(@:yes-%=%)[m" +override ACTIONS_ENDGROUP = @echo "::endgroup::" endif ifneq ($(filter darwin%,$(target_os)),) -# Remove debug option not to generate thousands of .dSYM -RJIT_DEBUGFLAGS := $(filter-out -g%,$(RJIT_DEBUGFLAGS)) - INSTRUBY_ENV += SDKROOT= endif INSTRUBY_ARGS += --gnumake @@ -27,7 +25,7 @@ TEST_TARGETS := $(filter $(CHECK_TARGETS),$(MAKECMDGOALS)) TEST_DEPENDS := $(filter-out commit $(TEST_TARGETS),$(MAKECMDGOALS)) TEST_TARGETS := $(patsubst great,exam,$(TEST_TARGETS)) TEST_DEPENDS := $(filter-out great $(TEST_TARGETS),$(TEST_DEPENDS)) -TEST_TARGETS := $(patsubst exam,test-bundled-gems yes-test-bundler-parallel check,$(TEST_TARGETS)) +TEST_TARGETS := $(patsubst exam,test-bundled-gems test-bundler-parallel check,$(TEST_TARGETS)) TEST_TARGETS := $(patsubst check,test-syntax-suggest test-spec test-all test-tool test-short,$(TEST_TARGETS)) TEST_TARGETS := $(patsubst test-rubyspec,test-spec,$(TEST_TARGETS)) TEST_DEPENDS := $(filter-out exam check test-spec $(TEST_TARGETS),$(TEST_DEPENDS)) @@ -38,13 +36,15 @@ TEST_DEPENDS := $(filter-out test-all $(TEST_TARGETS),$(TEST_DEPENDS)) TEST_TARGETS := $(patsubst test,test-short,$(TEST_TARGETS)) TEST_DEPENDS := $(filter-out test $(TEST_TARGETS),$(TEST_DEPENDS)) TEST_TARGETS := $(patsubst test-short,btest-ruby test-knownbug test-basic,$(TEST_TARGETS)) -TEST_TARGETS := $(patsubst test-bundled-gems,test-bundled-gems-run,$(TEST_TARGETS)) +TEST_TARGETS := $(patsubst test-basic,test-basic test-leaked-globals,$(TEST_TARGETS)) +TEST_TARGETS := $(patsubst test-bundled-gems,test-bundled-gems-spec test-bundled-gems-run,$(TEST_TARGETS)) TEST_TARGETS := $(patsubst test-bundled-gems-run,test-bundled-gems-run $(PREPARE_BUNDLED_GEMS),$(TEST_TARGETS)) TEST_TARGETS := $(patsubst test-bundled-gems-prepare,test-bundled-gems-prepare $(PRECHECK_BUNDLED_GEMS) test-bundled-gems-fetch,$(TEST_TARGETS)) TEST_TARGETS := $(patsubst test-bundler-parallel,test-bundler-parallel $(PREPARE_BUNDLER),$(TEST_TARGETS)) TEST_TARGETS := $(patsubst test-syntax-suggest,test-syntax-suggest $(PREPARE_SYNTAX_SUGGEST),$(TEST_TARGETS)) TEST_DEPENDS := $(filter-out test-short $(TEST_TARGETS),$(TEST_DEPENDS)) TEST_DEPENDS += $(if $(filter great exam love check,$(MAKECMDGOALS)),all exts) +TEST_TARGETS := $(patsubst yes-%,%,$(filter-out no-%,$(TEST_TARGETS))) endif in-srcdir := $(if $(filter-out .,$(srcdir)),$(CHDIR) $(srcdir) &&) @@ -91,16 +91,32 @@ $(addprefix yes-,$(TEST_TARGETS)): $(TEST_DEPENDS) endif ORDERED_TEST_TARGETS := $(filter $(TEST_TARGETS), \ - btest-ruby test-knownbug test-basic \ + btest-ruby test-knownbug test-leaked-globals test-basic \ test-testframework test-tool test-ruby test-all \ test-spec test-syntax-suggest-prepare test-syntax-suggest \ test-bundler-prepare test-bundler test-bundler-parallel \ test-bundled-gems-precheck test-bundled-gems-fetch \ test-bundled-gems-prepare test-bundled-gems-run \ + test-bundled-gems-spec \ + ) + +# grep ^yes-test-.*-precheck: template/Makefile.in defs/gmake.mk common.mk +test_prechecks := $(filter $(ORDERED_TEST_TARGETS),\ + test-leaked-globals \ + test-all \ + test-spec \ + test-syntax-suggest \ + test-bundler \ + test-bundler-parallel \ + test-bundled-gems\ ) -prev_test := $(if $(filter test-spec,$(ORDERED_TEST_TARGETS)),test-spec-precheck) +prev_test := $(subst test-bundler-parallel,test-bundler,$(test_prechecks)) +prev_test := $(addsuffix -precheck,$(prev_test)) +first_test_prechecks := $(prev_test) + $(foreach test,$(ORDERED_TEST_TARGETS), \ - $(eval yes-$(value test) no-$(value test): $(value prev_test)); \ + $(eval yes-$(value test): $(addprefix yes-,$(value prev_test))); \ + $(eval no-$(value test): $(addprefix no-,$(value prev_test))); \ $(eval prev_test := $(value test))) endif @@ -178,15 +194,22 @@ $(SCRIPTBINDIR): $(Q) mkdir $@ .PHONY: commit -commit: $(if $(filter commit,$(MAKECMDGOALS)),$(filter-out commit,$(MAKECMDGOALS))) up +COMMIT_PREPARE := $(subst :,\:,$(filter-out commit do-commit,$(MAKECMDGOALS))) up + +commit: pre-commit $(DOT_WAIT) do-commit $(DOT_WAIT) post_commit +pre-commit: $(COMMIT_PREPARE) +do-commit: $(if $(DOT_WAIT),,pre-commit) @$(BASERUBY) -C "$(srcdir)" -I./tool/lib -rvcs -e 'VCS.detect(".").commit' +post-commit: $(if $(DOT_WAIT),,do-commit) +$(Q) \ { \ $(in-srcdir) \ exec sed -f tool/prereq.status defs/gmake.mk template/Makefile.in common.mk; \ } | \ - $(MAKE) $(mflags) Q=$(Q) ECHO=$(ECHO) srcdir="$(srcdir)" srcs_vpath="" CHDIR="$(CHDIR)" \ - BOOTSTRAPRUBY="$(BOOTSTRAPRUBY)" MINIRUBY="$(BASERUBY)" BASERUBY="$(BASERUBY)" \ + $(MAKE) $(mflags) Q=$(Q) ECHO=$(ECHO) \ + top_srcdir="$(top_srcdir)" srcdir="$(srcdir)" srcs_vpath="" CHDIR="$(CHDIR)" \ + BOOTSTRAPRUBY="$(BOOTSTRAPRUBY)" BOOTSTRAPRUBY_OPT="$(BOOTSTRAPRUBY_OPT)" \ + MINIRUBY="$(BASERUBY)" BASERUBY="$(BASERUBY)" HAVE_BASERUBY="$(HAVE_BASERUBY)" \ VCSUP="" ENC_MK=.top-enc.mk REVISION_FORCE=PHONY CONFIGURE="$(CONFIGURE)" -f - \ update-src srcs all-incs @@ -304,6 +327,7 @@ foreach-bundled-gems-rev-0 = \ bundled-gem-gemfile = $(srcdir)/gems/$(1)-$(2).gem bundled-gem-gemspec = $(srcdir)/gems/src/$(1)/$(1).gemspec bundled-gem-extracted = $(srcdir)/.bundle/gems/$(1)-$(2) +bundled-gem-revision = $(srcdir)/.bundle/.timestamp/$(1).revision update-gems: | $(patsubst %,$(srcdir)/gems/%.gem,$(bundled-gems)) update-gems: | $(call foreach-bundled-gems-rev,bundled-gem-gemfile) @@ -343,24 +367,25 @@ $(srcdir)/gems/src/$(1)/.git: | $(srcdir)/gems/src $(ECHO) Cloning $(4) $(Q) $(GIT) clone $(4) $$(@D) -$(srcdir)/.bundle/.timestamp/$(1).revision: \ +$(bundled-gem-revision): \ $(if $(if $(wildcard $$(@)),$(filter $(3),$(shell cat $$(@)))),,PHONY) \ | $(srcdir)/.bundle/.timestamp $(srcdir)/gems/src/$(1)/.git $(ECHO) Update $(1) to $(3) $(Q) $(CHDIR) "$(srcdir)/gems/src/$(1)" && \ - $(GIT) fetch origin $(3) && \ - $(GIT) checkout --detach $(3) && \ - : + if [ `$(GIT) rev-parse HEAD` != $(3) ]; then \ + $(GIT) fetch origin $(3) && \ + $(GIT) checkout --detach $(3) && \ + :; \ + fi echo $(3) | $(IFCHANGE) $$(@) - # The repository of minitest does not include minitest.gemspec because it uses hoe. # This creates a dummy gemspec. -$(srcdir)/gems/src/$(1)/$(1).gemspec: $(srcdir)/.bundle/.timestamp/$(1).revision \ +$(bundled-gem-gemspec): $(bundled-gem-revision) \ | $(srcdir)/gems/src/$(1)/.git $(Q) $(BASERUBY) -I$(tooldir)/lib -rbundled_gem -e 'BundledGem.dummy_gemspec(*ARGV)' $$(@) -$(srcdir)/gems/$(1)-$(2).gem: $(srcdir)/gems/src/$(1)/$(1).gemspec \ - $(srcdir)/.bundle/.timestamp/$(1).revision +$(bundled-gem-gemfile): $(bundled-gem-gemspec) $(bundled-gem-revision) $(ECHO) Building $(1)@$(3) to $$(@) $(Q) $(BASERUBY) -C "$(srcdir)" \ -Itool/lib -rbundled_gem \ @@ -392,6 +417,17 @@ endif .SECONDARY: update-unicode-ucd-emoji-files .SECONDARY: update-unicode-emoji-files +ifneq ($(DOT_WAIT),) +.NOTPARALLEL: update-unicode +.NOTPARALLEL: update-unicode-files +.NOTPARALLEL: update-unicode-auxiliary-files +.NOTPARALLEL: update-unicode-ucd-emoji-files +.NOTPARALLEL: update-unicode-emoji-files +.NOTPARALLEL: $(UNICODE_FILES) $(UNICODE_PROPERTY_FILES) +.NOTPARALLEL: $(UNICODE_AUXILIARY_FILES) +.NOTPARALLEL: $(UNICODE_UCD_EMOJI_FILES) $(UNICODE_EMOJI_FILES) +endif + ifeq ($(HAVE_GIT),yes) REVISION_LATEST := $(shell $(CHDIR) $(srcdir) && $(GIT) log -1 --format=%H 2>/dev/null) else @@ -434,6 +470,10 @@ benchmark/%: miniruby$(EXEEXT) update-benchmark-driver PHONY --executables="built-ruby::$(BENCH_RUBY) --disable-gem" \ $(srcdir)/$@ $(BENCH_OPTS) $(OPTS) +clean-local:: TARGET_SO = $(PROGRAM) $(WPROGRAM) $(LIBRUBY_SO) $(STATIC_RUBY) miniruby goruby +clean-local:: + -$(Q)$(RMALL) $(cleanlibs) + clean-srcs-ext:: $(Q)$(RM) $(patsubst $(srcdir)/%,%,$(EXT_SRCS)) @@ -469,12 +509,17 @@ $(RUBYSPEC_CAPIEXT)/%.$(DLEXT): $(srcdir)/$(RUBYSPEC_CAPIEXT)/%.c $(srcdir)/$(RU $(ECHO) building $@ $(Q) $(MAKEDIRS) $(@D) $(Q) $(DLDSHARED) -L. $(XDLDFLAGS) $(XLDFLAGS) $(LDFLAGS) $(INCFLAGS) $(CPPFLAGS) $(OUTFLAG)$@ $< $(LIBRUBYARG) +ifneq ($(POSTLINK),) + $(Q) $(POSTLINK) +endif $(Q) $(RMALL) $@.* -rubyspec-capiext: $(patsubst %.c,$(RUBYSPEC_CAPIEXT)/%.$(DLEXT),$(notdir $(wildcard $(srcdir)/$(RUBYSPEC_CAPIEXT)/*.c))) +RUBYSPEC_CAPIEXT_SO := $(patsubst %.c,$(RUBYSPEC_CAPIEXT)/%.$(DLEXT),$(notdir $(wildcard $(srcdir)/$(RUBYSPEC_CAPIEXT)/*.c))) +rubyspec-capiext: $(RUBYSPEC_CAPIEXT_SO) @ $(NULLCMD) ifeq ($(ENABLE_SHARED),yes) +ruby: $(if $(LIBRUBY_SO_UPDATE),$(RUBYSPEC_CAPIEXT_SO)) exts: rubyspec-capiext endif @@ -484,14 +529,42 @@ spec/%/ spec/%_spec.rb: programs exts PHONY ruby.pc: $(filter-out ruby.pc,$(ruby_pc)) matz: up + $(eval OLD := $(MAJOR).$(MINOR).0) $(eval MINOR := $(shell expr $(MINOR) + 1)) - $(eval message := Development of $(MAJOR).$(MINOR).0 started.) + $(eval NEW := $(MAJOR).$(MINOR).0) + $(eval message := Development of $(NEW) started.) $(eval files := include/ruby/version.h include/ruby/internal/abi.h) + $(GIT) -C $(srcdir) mv -f NEWS.md doc/NEWS/NEWS-$(OLD).md + $(GIT) -C $(srcdir) commit -m "[DOC] Flush NEWS.md" sed -i~ \ -e "s/^\(#define RUBY_API_VERSION_MINOR\) .*/\1 $(MINOR)/" \ -e "s/^\(#define RUBY_ABI_VERSION\) .*/\1 0/" \ $(files:%=$(srcdir)/%) - $(GIT) -C $(srcdir) commit -m "$(message)" $(files) + $(GIT) -C $(srcdir) add $(files) + $(BASERUBY) -C $(srcdir) -p -00 \ + -e 'BEGIN {old, new = ARGV.shift(2); STDOUT.reopen("NEWS.md")}' \ + -e 'case $$.' \ + -e 'when 1; $$_.sub!(/Ruby \K[0-9.]+/, new)' \ + -e 'when 2; $$_.sub!(/\*\*\K[0-9.]+(?=\*\*)/, old)' \ + -e 'end' \ + -e 'next if /^[\[ *]/ =~ $$_' \ + -e '$$_.sub!(/\n{2,}\z/, "\n\n")' \ + $(OLD) $(NEW) doc/NEWS/NEWS-$(OLD).md + $(GIT) -C $(srcdir) add NEWS.md + $(GIT) -C $(srcdir) commit -m "$(message)" tags: $(MAKE) GIT="$(GIT)" -C "$(srcdir)" -f defs/tags.mk + + +# ripper_srcs makes all sources at once. invoking this target multiple +# times in parallel means all sources will be built for the number of +# sources times respectively. +ifneq ($(DOT_WAIT),) +.NOTPARALLEL: ripper_srcs +else +ripper_src = +$(foreach r,$(RIPPER_SRCS),$(eval $(value r): | $(value ripper_src))\ + $(eval ripper_src := $(value r))) +ripper_srcs: $(ripper_src) +endif diff --git a/defs/id.def b/defs/id.def index 2ddde7be70..71baa4f968 100644 --- a/defs/id.def +++ b/defs/id.def @@ -59,6 +59,7 @@ firstline, predefined = __LINE__+1, %[\ name nil path + pack _ UScore diff --git a/defs/known_errors.def b/defs/known_errors.def index e9694cfbda..23e9e53507 100644 --- a/defs/known_errors.def +++ b/defs/known_errors.def @@ -1,157 +1,157 @@ -E2BIG -EACCES -EADDRINUSE -EADDRNOTAVAIL -EADV -EAFNOSUPPORT -EAGAIN -EALREADY -EAUTH -EBADARCH -EBADE -EBADEXEC -EBADF -EBADFD -EBADMACHO -EBADMSG -EBADR -EBADRPC -EBADRQC -EBADSLT -EBFONT -EBUSY -ECANCELED -ECAPMODE -ECHILD -ECHRNG -ECOMM -ECONNABORTED -ECONNREFUSED -ECONNRESET -EDEADLK -EDEADLOCK -EDESTADDRREQ -EDEVERR -EDOM -EDOOFUS -EDOTDOT -EDQUOT -EEXIST -EFAULT -EFBIG -EFTYPE -EHOSTDOWN -EHOSTUNREACH -EHWPOISON -EIDRM -EILSEQ -EINPROGRESS -EINTR -EINVAL -EIO -EIPSEC -EISCONN -EISDIR -EISNAM -EKEYEXPIRED -EKEYREJECTED -EKEYREVOKED -EL2HLT -EL2NSYNC -EL3HLT -EL3RST -ELAST -ELIBACC -ELIBBAD -ELIBEXEC -ELIBMAX -ELIBSCN -ELNRNG -ELOOP -EMEDIUMTYPE -EMFILE -EMLINK -EMSGSIZE -EMULTIHOP -ENAMETOOLONG -ENAVAIL -ENEEDAUTH -ENETDOWN -ENETRESET -ENETUNREACH -ENFILE -ENOANO -ENOATTR -ENOBUFS -ENOCSI -ENODATA -ENODEV -ENOENT -ENOEXEC -ENOKEY -ENOLCK -ENOLINK -ENOMEDIUM -ENOMEM -ENOMSG -ENONET -ENOPKG -ENOPOLICY -ENOPROTOOPT -ENOSPC -ENOSR -ENOSTR -ENOSYS -ENOTBLK -ENOTCAPABLE -ENOTCONN -ENOTDIR -ENOTEMPTY -ENOTNAM -ENOTRECOVERABLE -ENOTSOCK -ENOTSUP -ENOTTY -ENOTUNIQ -ENXIO -EOPNOTSUPP -EOVERFLOW -EOWNERDEAD -EPERM -EPFNOSUPPORT -EPIPE -EPROCLIM -EPROCUNAVAIL -EPROGMISMATCH -EPROGUNAVAIL -EPROTO -EPROTONOSUPPORT -EPROTOTYPE -EPWROFF -EQFULL -ERANGE -EREMCHG -EREMOTE -EREMOTEIO -ERESTART -ERFKILL -EROFS -ERPCMISMATCH -ESHLIBVERS -ESHUTDOWN -ESOCKTNOSUPPORT -ESPIPE -ESRCH -ESRMNT -ESTALE -ESTRPIPE -ETIME -ETIMEDOUT -ETOOMANYREFS -ETXTBSY -EUCLEAN -EUNATCH -EUSERS -EWOULDBLOCK -EXDEV -EXFULL +E2BIG Argument list too long +EACCES Permission denied +EADDRINUSE Address already in use +EADDRNOTAVAIL Address not available +EADV Advertise error +EAFNOSUPPORT Address family not supported +EAGAIN Resource temporarily unavailable, try again (may be the same value as EWOULDBLOCK) +EALREADY Connection already in progress +EAUTH Authentication error +EBADARCH Bad CPU type in executable +EBADE Bad exchange +EBADEXEC Bad executable +EBADF Bad file descriptor +EBADFD File descriptor in bad state +EBADMACHO Malformed Macho file +EBADMSG Bad message +EBADR Invalid request descriptor +EBADRPC RPC struct is bad +EBADRQC Invalid request code +EBADSLT Invalid slot +EBFONT Bad font file format +EBUSY Device or resource busy +ECANCELED Operation canceled +ECAPMODE Not permitted in capability mode +ECHILD No child processes +ECHRNG Channel number out of range +ECOMM Communication error on send +ECONNABORTED Connection aborted +ECONNREFUSED Connection refused +ECONNRESET Connection reset +EDEADLK Resource deadlock avoided +EDEADLOCK File locking deadlock error +EDESTADDRREQ Destination address required +EDEVERR Device error; e.g., printer paper out +EDOM Mathematics argument out of domain of function +EDOOFUS Improper function use +EDOTDOT RFS specific error +EDQUOT Disk quota exceeded +EEXIST File exists +EFAULT Bad address +EFBIG File too large +EFTYPE Invalid file type or format +EHOSTDOWN Host is down +EHOSTUNREACH Host is unreachable +EHWPOISON Memory page has hardware error +EIDRM Identifier removed +EILSEQ Invalid or incomplete multibyte or wide character +EINPROGRESS Operation in progress +EINTR Interrupted function call +EINVAL Invalid argument +EIO Input/output error +EIPSEC IPsec processing failure +EISCONN Socket is connected +EISDIR Is a directory +EISNAM Is a named file type +EKEYEXPIRED Key has expired +EKEYREJECTED Key was rejected by service +EKEYREVOKED Key has been revoked +EL2HLT Level 2 halted +EL2NSYNC Level 2 not synchronized +EL3HLT Level 3 halted +EL3RST Level 3 reset +ELIBACC Cannot access a needed shared library +ELIBBAD Accessing a corrupted shared library +ELIBEXEC Cannot exec a shared library directly +ELIBMAX Attempting to link in too many shared libraries +ELIBSCN .lib section in a.out corrupted +ELNRNG Link number out of range +ELOOP Too many levels of symbolic links +EMEDIUMTYPE Wrong medium type +EMFILE Too many open files +EMLINK Too many links +EMSGSIZE Message too long +EMULTIHOP Multihop attempted +ENAMETOOLONG Filename too long +ENAVAIL No XENIX semaphores available +ENEEDAUTH Need authenticator +ENETDOWN Network is down +ENETRESET Connection aborted by network +ENETUNREACH Network unreachable +ENFILE Too many open files in system +ENOANO No anode +ENOATTR Attribute not found +ENOBUFS No buffer space available +ENOCSI No CSI structure available +ENODATA No data available +ENODEV No such device +ENOENT No such file or directory +ENOEXEC Exec format error +ENOKEY Required key not available +ENOLCK No locks available +ENOLINK Link has been severed +ENOMEDIUM No medium found +ENOMEM Not enough space/cannot allocate memory +ENOMSG No message of the desired type +ENONET Machine is not on the network +ENOPKG Package not installed +ENOPOLICY No such policy +ENOPROTOOPT Protocol not available +ENOSPC No space left on device +ENOSR No STREAM resources +ENOSTR Not a STREAM +ENOSYS Functionality not implemented +ENOTBLK Block device required +ENOTCAPABLE Capabilities insufficient +ENOTCONN The socket is not connected +ENOTDIR Not a directory +ENOTEMPTY Directory not empty +ENOTNAM Not a XENIX named type file +ENOTRECOVERABLE State not recoverable +ENOTSOCK Not a socket +ENOTSUP Operation not supported +ENOTTY Inappropriate I/O control operation +ENOTUNIQ Name not unique on network +ENXIO No such device or address +EOPNOTSUPP Operation not supported on socket +EOVERFLOW Value too large to be stored in data type +EOWNERDEAD Owner died +EPERM Operation not permitted +EPFNOSUPPORT Protocol family not supported +EPIPE Broken pipe +EPROCLIM Too many processes +EPROCUNAVAIL Bad procedure for program +EPROGMISMATCH Program version wrong +EPROGUNAVAIL RPC program isn't available +EPROTO Protocol error +EPROTONOSUPPORT Protocol not supported +EPROTOTYPE Protocol wrong type for socket +EPWROFF Device power is off +EQFULL Interface output queue is full +ERANGE Result too large +EREMCHG Remote address changed +EREMOTE Object is remote +EREMOTEIO Remote I/O error +ERESTART Interrupted system call should be restarted +ERFKILL Operation not possible due to RF-kill +EROFS Read-only file system +ERPCMISMATCH RPC version wrong +ESHLIBVERS Shared library version mismatch +ESHUTDOWN Cannot send after transport endpoint shutdown +ESOCKTNOSUPPORT Socket type not supported +ESPIPE Illegal seek +ESRCH No such process +ESRMNT Server mount error +ESTALE Stale file handle +ESTRPIPE Streams pipe error +ETIME Timer expired +ETIMEDOUT Connection timed out +ETOOMANYREFS Too many references: cannot splice +ETXTBSY Text file busy +EUCLEAN Structure needs cleaning +EUNATCH Protocol driver not attached +EUSERS Too many users +EWOULDBLOCK Operation would block +EXDEV Invalid cross-device link +EXFULL Exchange full +ELAST Largest errno value |