From owner-freebsd-hackers@FreeBSD.ORG Thu Nov 6 11:14:06 2014 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 34E2C5B1 for ; Thu, 6 Nov 2014 11:14:06 +0000 (UTC) Received: from mail-wg0-x22f.google.com (mail-wg0-x22f.google.com [IPv6:2a00:1450:400c:c00::22f]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AD59BD20 for ; Thu, 6 Nov 2014 11:14:05 +0000 (UTC) Received: by mail-wg0-f47.google.com with SMTP id a1so897082wgh.34 for ; Thu, 06 Nov 2014 03:14:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:mail-followup-to:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=Itd2c6laezlxVg5kN9rTokMjoCtUr4XfS2Ow6Lj6tJs=; b=i1DfTftwWviBvbDLqZM3sVL0fKuX+b+pbDfkzGwx5JeWPSFnF/AelSFtnj+KDcpdh9 7hKlQ4aKd7WVovPzrQF8f34VA0W2FI7L2BxcbR7sLmho+p+KojZGkSudj2YARHcFAGbX LT6gosIou5LSwOTmJXb3njolrJnOVEKRaJMEDYeBqJPUHmnmAPMw3zN8ENx3WHHgpUhA 4y1WozCsj84mrZ10l/eatyw1Qgks7rRQlMBLs/77YrXCU/8ii5BnwyKBvSQKAyh4qyt5 he2w9QTvPo1yD78J1j/848cfSmeIk83Tswt8Gd9CQxVQMkiOxnIVl1Dvw++xTf9MLCBd lwMw== X-Received: by 10.194.110.4 with SMTP id hw4mr4590454wjb.102.1415272444050; Thu, 06 Nov 2014 03:14:04 -0800 (PST) Received: from dft-labs.eu (n1x0n-1-pt.tunnel.tserv5.lon1.ipv6.he.net. [2001:470:1f08:1f7::2]) by mx.google.com with ESMTPSA id ji10sm19105985wid.7.2014.11.06.03.14.00 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 06 Nov 2014 03:14:00 -0800 (PST) Date: Thu, 6 Nov 2014 12:13:58 +0100 From: Mateusz Guzik To: Tiwei Bie Subject: Re: [PATCH] Finish the task 'sysctl reporting current working directory' Message-ID: <20141106111358.GF12284@dft-labs.eu> Mail-Followup-To: Mateusz Guzik , Tiwei Bie , Konstantin Belousov , freebsd-hackers@freebsd.org References: <1414987325-23280-1-git-send-email-btw@mail.ustc.edu.cn> <20141103051908.GC29497@dft-labs.eu> <20141103064052.GA1739@freebsd> <20141103080526.GE29497@dft-labs.eu> <20141103085235.GA85851@freebsd> <20141106081330.GA12284@dft-labs.eu> <20141106085750.GA52132@freebsd> <20141106092134.GL53947@kib.kiev.ua> <20141106100032.GA80996@freebsd> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20141106100032.GA80996@freebsd> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: Konstantin Belousov , freebsd-hackers@freebsd.org X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Nov 2014 11:14:06 -0000 On Thu, Nov 06, 2014 at 06:00:32PM +0800, Tiwei Bie wrote: > On Thu, Nov 06, 2014 at 11:21:34AM +0200, Konstantin Belousov wrote: > > On Thu, Nov 06, 2014 at 04:57:50PM +0800, Tiwei Bie wrote: > > > On Thu, Nov 06, 2014 at 09:13:31AM +0100, Mateusz Guzik wrote: > > > > On Mon, Nov 03, 2014 at 04:52:35PM +0800, Tiwei Bie wrote: > > > > > > > > kernel changes got in in r274167 > > > > > > > > Please submit tmux patch to bugzilla. > > > > > > > > > > Thanks! I have submitted the tmux patch to bugzilla [1]. > > > > > > [1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=194858 > > > > This is incorrect way to use kern_proc_cwd. You should try the new > > sysctl, and on ENOENT fall back to the kern_proc_file. Expecting > > that the binary is run on the same machine where it was build is > > wrong. > > > > Yeah, you are right. Following is my new patch, maybe it needs some > style improvements. > > diff --git a/osdep-freebsd.c b/osdep-freebsd.c > index d596eab..673ca98 100644 > --- a/osdep-freebsd.c > +++ b/osdep-freebsd.c > @@ -133,7 +133,7 @@ error: > } > > char * > -osdep_get_cwd(int fd) > +osdep_get_cwd_fallback(int fd) > { > static char wd[PATH_MAX]; > struct kinfo_file *info = NULL; > @@ -158,6 +158,31 @@ osdep_get_cwd(int fd) > return (NULL); > } > > +#ifdef KERN_PROC_CWD > +char * > +osdep_get_cwd(int fd) > +{ > + static struct kinfo_file info; > + int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_CWD, 0 }; > + size_t len = sizeof info; > + > + if ((name[3] = tcgetpgrp(fd)) == -1) > + return (NULL); > + if (sysctl(name, 4, &info, &len, NULL, 0) == -1) { > + if (errno == ENOENT) > + return (osdep_get_cwd_fallback(fd)); > + return (NULL); > + } > + return (info.kf_path); tmux calls this quite often and trying out this sysctl just to see it fail each time is a waste. have a static var to indicate the failure and to know when to fallback immediately. Also this probably should be reworked to obtain tcgetpgrp once and then decide which sysctl to use, but that's largely a perference matter. > +} > +#else /* !KERN_PROC_CWD */ > +char * > +osdep_get_cwd(int fd) > +{ > + return (osdep_get_cwd_fallback(fd)); > +} > +#endif /* KERN_PROC_CWD */ > + > struct event_base * > osdep_event_init(void) > { > -- > 2.1.0 > > -- Mateusz Guzik