[Libguestfs] [PATCH] inspect: improve detection of Mageia install discs

Pino Toscano ptoscano at redhat.com
Wed Mar 22 16:49:46 UTC 2017


On Wednesday, 22 March 2017 17:31:41 CET Richard W.M. Jones wrote:
> On Wed, Mar 22, 2017 at 05:16:34PM +0100, Pino Toscano wrote:
> > Check for a "product.id" file in an architecture-specific subdirectory
> > of the main partition, and use its data to improve the data on the
> > media.
> > 
> > Only Mageia as distribution name is recognized there, since most
> > probably this file will not be available on other distros.
> > ---
> >  lib/inspect-fs-cd.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 76 insertions(+)
> > 
> > diff --git a/lib/inspect-fs-cd.c b/lib/inspect-fs-cd.c
> > index 278386e..9c809b4 100644
> > --- a/lib/inspect-fs-cd.c
> > +++ b/lib/inspect-fs-cd.c
> > @@ -21,6 +21,8 @@
> >  #include <stdio.h>
> >  #include <stdlib.h>
> >  #include <string.h>
> > +#include <libintl.h>
> > +#include <inttypes.h>
> >  
> >  #ifdef HAVE_ENDIAN_H
> >  #include <endian.h>
> > @@ -432,10 +434,72 @@ check_w2k3_installer_root (guestfs_h *g, struct inspect_fs *fs,
> >    return 0;
> >  }
> >  
> > +/* Read the data from a product.id-like file.
> > + *
> > + * This is an old file, mostly used in Mandriva-based systems (still including
> > + * Mageia).  A very minimal documentation for it is:
> > + * - https://wiki.mageia.org/en/Product_id
> > + * - http://wiki.mandriva.com/en/Product_id (old URL, defunct)
> > + */
> > +static int
> > +check_product_id_installer_root (guestfs_h *g, struct inspect_fs *fs,
> > +                                 const char *filename)
> > +{
> > +  int64_t size;
> > +  CLEANUP_FREE_STRING_LIST char **lines = NULL;
> > +  const char *elem;
> > +  char *saveptr;
> > +
> > +  fs->type = OS_TYPE_LINUX;
> > +
> > +  /* Don't trust guestfs_head_n not to break with very large files.
> > +   * Check the file size is something reasonable first.
> > +   */
> > +  size = guestfs_filesize (g, filename);
> > +  if (size == -1)
> > +    /* guestfs_filesize failed and has already set error in handle */
> > +    return -1;
> > +  if (size > MAX_SMALL_FILE_SIZE) {
> > +    error (g, _("size of %s is unreasonably large (%" PRIi64 " bytes)"),
> > +           filename, size);
> > +    return -1;
> > +  }
> > +
> > +  lines = guestfs_head_n (g, 1, filename);
> > +  if (lines == NULL)
> > +    return -1;
> 
> Could the above code be replaced by a call to
> guestfs_int_first_line_of_file ?

Indeed, good catch -- thanks!

> > +  elem = strtok_r (lines[0], ",", &saveptr);
> 
> You can probably use strtok here [I think?] if it's simpler.

I'd maybe if this was in the daemon, which runs single-threaded.
OTOH, using a non-reentrant strtok in the library might cause conflicts
with multithreaded applications using libguestfs.

Thanks,
-- 
Pino Toscano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20170322/6b34e661/attachment.sig>


More information about the Libguestfs mailing list