From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/5164 Path: news.gmane.org!not-for-mail From: Szabolcs Nagy Newsgroups: gmane.linux.lib.musl.general Subject: Re: [UGLY PATCH v2] Support for no-legacy-syscalls archs Date: Mon, 26 May 2014 23:13:49 +0200 Message-ID: <20140526211349.GJ12324@port70.net> References: <20140525054237.GA18085@brightrain.aerifal.cx> <20140526184036.GZ507@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1401138850 26961 80.91.229.3 (26 May 2014 21:14:10 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 26 May 2014 21:14:10 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-5169-gllmg-musl=m.gmane.org@lists.openwall.com Mon May 26 23:14:04 2014 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1Wp2Da-0002xp-QB for gllmg-musl@plane.gmane.org; Mon, 26 May 2014 23:14:02 +0200 Original-Received: (qmail 5428 invoked by uid 550); 26 May 2014 21:14:02 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 5420 invoked from network); 26 May 2014 21:14:01 -0000 Content-Disposition: inline In-Reply-To: <20140526184036.GZ507@brightrain.aerifal.cx> User-Agent: Mutt/1.5.21 (2010-09-15) Xref: news.gmane.org gmane.linux.lib.musl.general:5164 Archived-At: * Rich Felker [2014-05-26 14:40:36 -0400]: > +#ifdef SYS_fork > ret = syscall(SYS_fork); > +#else > + ret = syscall(SYS_clone, SIGCHLD); > +#endif clone has more args > int select(int n, fd_set *restrict rfds, fd_set *restrict wfds, fd_set *restrict efds, struct timeval *restrict tv) > { > +#ifdef SYS_select > return syscall_cp(SYS_select, n, rfds, wfds, efds, tv); > +#else > + long data[2] = { 0, _NSIG/8 }; > + struct timespec ts; > + if (tv) { > + ts.tv_sec = tv->tv_sec; > + ts.tv_nsec = tv->tv_usec > 999999 ? > + 999999999 : tv->tv_usec * 1000; > + } > + return syscall_cp(SYS_pselect6, n, rfds, wfds, efds, tv ? &ts : 0, data); > +#endif tv_usec may be negative isnt it better to adjust tv_sec if usec is large? or fail with EINVAL like in futimensat: > + if (times) { > + int i; > + for (i=0; i<2; i++) { > + if (times[i].tv_usec >= 1000000U) > + return __syscall_ret(-EINVAL); > + ts[i].tv_sec = times[i].tv_sec; > + ts[i].tv_nsec = times[i].tv_usec * 1000; > + } > + } > + if (times) { > + struct timeval tmp[2]; > + int i; > + tv = tmp; > + for (i=0; i<2; i++) { > + if (times[i].tv_nsec >= 1000000000U) { > + if (times[i].tv_nsec == UTIME_NOW && > + times[1-i].tv_nsec == UTIME_NOW) { > + tv = 0; > + break; > + } > + if (times[i].tv_nsec == UTIME_OMIT) > + return __syscall_ret(-ENOSYS); > + return __syscall_ret(-EINVAL); > + } > + tmp[i].tv_sec = times[i].tv_sec; > + tmp[i].tv_usec = times[i].tv_nsec / 1000; > + } > + } (tv_nsec+500)/1000 would be better rounding but i guess 500 ns does not matter much > pid_t getpgrp(void) > { > +#ifdef SYS_getpgrp > return __syscall(SYS_getpgrp); > +#else > + return __syscall(SYS_getpgid, 0); > +#endif you said this can be just the new call