From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261228AbULEC0Z (ORCPT ); Sat, 4 Dec 2004 21:26:25 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261229AbULEC0Z (ORCPT ); Sat, 4 Dec 2004 21:26:25 -0500 Received: from pastinakel.tue.nl ([131.155.2.7]:17418 "EHLO pastinakel.tue.nl") by vger.kernel.org with ESMTP id S261228AbULEC0T (ORCPT ); Sat, 4 Dec 2004 21:26:19 -0500 Date: Sun, 5 Dec 2004 03:26:13 +0100 From: Andries Brouwer To: Rob Landley Cc: Jeff Garzik , Linus Torvalds , Paul Mackerras , Greg KH , David Woodhouse , Matthew Wilcox , David Howells , hch@infradead.org, aoliva@redhat.com, linux-kernel@vger.kernel.org, libc-hacker@sources.redhat.com, Mariusz Mazur , Arjan van de Ven , andersen@codepoet.org Subject: Re: [RFC] Splitting kernel headers and deprecating __KERNEL__ Message-ID: <20041205022613.GA13494@pclin040.win.tue.nl> References: <19865.1101395592@redhat.com> <41AAA746.5000003@pobox.com> <200412041949.57466.rob@landley.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200412041949.57466.rob@landley.net> User-Agent: Mutt/1.4.2i X-Spam-DCC: dmv.com: mailhost.tue.nl 1181; Body=1 Fuz1=1 Fuz2=1 Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org On Sat, Dec 04, 2004 at 07:49:57PM -0500, Rob Landley wrote: > How the heck do you implement losetup without including linux/loop.h? Copy the util-linux sources. > The way both busybox and util-linux do it is the to block copy out lots of > ugly crap, include linux/version.h, and have #ifdefs to fix up differences > between known kernel versions. I'm serious. Yes, a well-known problem. Util-linux has roughly #include #include #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,68) #define my_dev_t __kernel_dev_t #else #define my_dev_t __kernel_old_dev_t #endif Here the struct has not changed, but the names for the types have changed. Thus, instead of looking at and one could have a completely kernel-independent source with different defines for each architecture. But, all that nonsense is needed only for the obsolete struct loop_info. Any new program should use struct loop_info64, and it has a clean definition: struct loop_info64 { __u64 lo_device; /* ioctl r/o */ __u64 lo_inode; /* ioctl r/o */ __u64 lo_rdevice; /* ioctl r/o */ __u64 lo_offset; __u64 lo_sizelimit;/* bytes, 0 == max available */ __u32 lo_number; /* ioctl r/o */ __u32 lo_encrypt_type; __u32 lo_encrypt_key_size; /* ioctl w/o */ __u32 lo_flags; /* ioctl r/o */ __u8 lo_file_name[LO_NAME_SIZE]; __u8 lo_crypt_name[LO_NAME_SIZE]; __u8 lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ __u64 lo_init[2]; };