On Fri, 2013-02-08 at 09:42 +0000, Richard W.M. Jones wrote:
On Thu, Feb 07, 2013 at 02:24:10PM +0000, Matthew Booth wrote:
> ---
> daemon/devsparts.c | 27 +++++++++++++++++++++++++++
> generator/actions.ml | 17 +++++++++++++++++
> src/MAX_PROC_NR | 2 +-
> 3 files changed, 45 insertions(+), 1 deletion(-)
>
> diff --git a/daemon/devsparts.c b/daemon/devsparts.c
> index 9a2ce9a..1939f2a 100644
> --- a/daemon/devsparts.c
> +++ b/daemon/devsparts.c
> @@ -245,6 +245,33 @@ do_part_to_partnum (const char *part)
> }
>
> int
> +do_is_whole_device (const char *device)
> +{
> + #define PREFIX "/dev/"
> +
> + /* Shouldn't be possible because we already sanity checked our input */
> + if (!STRPREFIX (device, PREFIX)) return 0;
There's no need for this test.
> + CLEANUP_FREE char *devpath = NULL;
> + if (asprintf (&devpath, "/sys/block/%s/device",
> + device + strlen (PREFIX)) == -1)
> + {
> + reply_with_perror ("asprintf");
> + return -1;
> + }
> +
> + struct stat statbuf;
> + if (stat (devpath, &statbuf) == -1) {
> + if (errno == ENOENT || errno == ENOTDIR) return 0;
> +
> + reply_with_perror ("stat");
> + return -1;
> + }
> +
> + return 1;
> +}
This test seems fine. Is it worth adding S_ISDIR (statbuf.st_mode)?
It's actually a symlink. I'll add that and also a comment describing
what it's looking for, then push it.
Matt