From owner-freebsd-arch@FreeBSD.ORG Fri Aug 9 10:59:37 2013 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id C6C0FB71; Fri, 9 Aug 2013 10:59:37 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from mx1.stack.nl (relay02.stack.nl [IPv6:2001:610:1108:5010::104]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 86A9D2FF1; Fri, 9 Aug 2013 10:59:37 +0000 (UTC) Received: from snail.stack.nl (snail.stack.nl [IPv6:2001:610:1108:5010::131]) by mx1.stack.nl (Postfix) with ESMTP id 001A13592DA; Fri, 9 Aug 2013 12:59:34 +0200 (CEST) Received: by snail.stack.nl (Postfix, from userid 1677) id DB00628494; Fri, 9 Aug 2013 12:59:34 +0200 (CEST) Date: Fri, 9 Aug 2013 12:59:34 +0200 From: Jilles Tjoelker To: Mario Oshogbo Subject: Re: closedir - change in the libc Message-ID: <20130809105934.GA32419@stack.nl> References: <5204BD94.7050800@FreeBSD.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5204BD94.7050800@FreeBSD.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: freebsd-arch@freebsd.org X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Aug 2013 10:59:37 -0000 On Fri, Aug 09, 2013 at 11:59:48AM +0200, Mario Oshogbo wrote: > I'm a student attending in GSoC'13 in project "Write new features for > Capsicum" [1] and I would like to propose a little change to the libc. > In the libc we have the function opendir(3) and fdopendir(3) which are > responsible for opening directories. We also have function closedir(3) > which is responsible for free the structure allocated by two previous > funcions. > The problem with the closedir(3) is that he close fd used as argument of > fdopendir(3). I think programmer should be able to make a choice if he > want to close this descriptor automatically or not. Of course we are > able to use for dup(2) function and save fd before calling fdopendir(3) > to prevent closing but I think this is the one syscall which we could save. > To support the propose I would like to give some example. I working now > on making the fts(3) more sandbox friendly which means I would like to > remove all fchdir(2) functions and operate only on fd. One of the steps > I perform is changing the opendir(3) to the fdopendir(3). I also must > remember the fd of currently opened directory after perform fclosedir. > If we have N of directories we must perform N additional dup(2) and N > additional close(2) functions to save this fd. > So I would like to propose function called fdclosedir which will free > DIR structure but will not close fd attached to DIR structure. This > function also could return this fd which make it useful with the > opendir(3) function, when we don't know the fd but we would like free > DIR structure and perform some operations only on fd. I attach diff file > with my proposal of change. While this looks sensible, the only advantage is cleaner code and less memory usage. Instead of additional dup()/close(), you could also keep the DIR around as long as you need the fd. The ugliest part is that you may also have regular open()s on directories (for example if the maximum number of file descriptors had been exceeded and some directories had to be closed and now need to be reopened). I think this should remain doable, though. -- Jilles Tjoelker