qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Mulyadi Santosa <a_mulyadi@softhome.net>
To: qemu-devel@nongnu.org
Subject: Re: Re: [Qemu-devel] Mounting a disk image under Linux
Date: Sun, 20 Jun 2004 15:20:24 +0700	[thread overview]
Message-ID: <200406201520.24153.a_mulyadi@softhome.net> (raw)
In-Reply-To: <20040619234835.GA14521@jbrown.mylinuxbox.org>

[-- Attachment #1: Type: text/plain, Size: 375 bytes --]

Hello all

I take Jim's program and add some checking of fdisk output. Basically, it just 
skip the output :

"You must set cylinders.
You can do this from the extra functions menu"

I got this message when  run fdisk -lu, so I skip them until I get following 
lines:
"Disk /mnt/qemu/myimage: 0 MB, 0 bytes"

And the rest of the program is pretty similar

regards

Mulyadi



[-- Attachment #2: lomount.c --]
[-- Type: text/x-csrc, Size: 2787 bytes --]

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>

#define BUF 4096
#define TEMPFILE "/tmp/temp.minix"

int partnum(char * diskimage, FILE * temp, int * pnum)
{
	int num=0, c, i;
	char buf[BUF], buf2[BUF];
	strncpy(buf, diskimage, BUF);
	strncat(buf, "%d", BUF-strlen(buf));
	fscanf(temp, buf, pnum); /* skip start of line */
#ifdef DEBUG
	printf("pnum = %d\n", *pnum);
#endif
	c = fgetc(temp);
	while (c == ' ' || c == '*' || c == '@')
	{
		c = fgetc(temp);
#ifdef DEBUG
		printf("c = %d ", c);
#endif
	}
	/*ungetc(c, temp);
	fscanf(temp, "%d", &num);*/
#ifdef DEBUG
	printf("c = %d\n", c);
#endif
	buf2[0] = c;
	c = fgetc(temp);
	i = 1;
	while (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9')
	{
		buf2[i] = c;
		c = fgetc(temp);
		i++;
	}
	buf2[i] = '\0';
	num = atoi(buf2);
#ifdef DEBUG
	printf("buf2 = %s num = %d\n", buf2, num);
#endif
	fgets(buf, BUF, temp); /* skip rest of line */
	return num;
}

int main(int argc, char ** argv)
{
	FILE * temp;
	char buf[BUF], argv2[BUF], diskimage[BUF];
	int partition = 1, sec1, sec2, num = 0, pnum = 0, len = BUF, i, f = 0;
	int total_sec;
	int pressed_key=0;
	for (i = 1; i < argc; i ++)
	{
		if (strncmp(argv[i], "-diskimage", BUF)==0)
		{
			strncpy(diskimage, argv[i+1], BUF);
			i++; f = 1;
		}
		else if (strncmp(argv[i], "-partition", BUF)==0)
		{
			partition = atoi(argv[i+1]);
			i++;
			if (partition < 1) partition = 1;
		}
		else
		{
			strncat(argv2, argv[i], len);
			strncat(argv2, " ", len-1);
			len -= strlen(argv[i]);
			len--;
		}
	}
	if (!f)
	{
		printf("You must specify -diskimage and -partition\n");
		printf("ex. lomount -t fs-type -diskimage hda.img -partition 1 /mnt\n");
		return 0;
	}
	snprintf(buf, BUF, "/sbin/fdisk -lu %s > %s 2>&1", diskimage, TEMPFILE);
	system(buf);
	temp = fopen(TEMPFILE, "r");

	do
	{
	    fgets(buf, BUF, temp); /* skip until we get "Disk" */
		
	} while (strncasecmp(buf, "Disk", 4)!=0);
	fgets(buf, BUF, temp); //skip once more
	fscanf(temp, "Units = sectors of %d * %d = %d bytes\n", &sec1, &sec2, &total_sec);
#ifdef DEBUG
	printf("sec1: %d sec2: %d\n", sec1, sec2);
#endif
	fgets(buf, BUF, temp); /* skip sixth line */
#ifdef DEBUG
	printf("spare line: %s\n", buf);
#endif
	while (pnum != partition)
	{
		num = partnum(diskimage, temp, &pnum);
	}
	fclose(temp);
	pnum = sec1 * sec2 * num;
#ifdef DEBUG
	printf("offset = %d\n", pnum);
#endif
	snprintf(buf, BUF, "mount -oloop,offset=%d %s %s", pnum, diskimage, argv2);
		
	printf("Do you want to execute mount command? [Y/n] ");
	pressed_key=getchar();
	
	/* if user press Enter (that means YES), or 'y' or 'Y'
	then execute the  command
	 */
	if ( (pressed_key==10) || (pressed_key==89) || (pressed_key==121) )
	{
	    system(buf);
	}
	return 0;
}

      reply	other threads:[~2004-06-20  8:22 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-16 14:42 [Qemu-devel] some help Ludovic Gele
2004-06-16 19:13 ` [Qemu-devel] Can't see network under qemu 0.5.5 Leonard T. Erwine
2004-06-17  8:22   ` Ludovic Gele
2004-06-17 15:39     ` Marc Vertes
2004-06-18 20:58       ` Leonard T. Erwine
2004-06-18 20:34     ` Leonard T. Erwine
2004-06-16 20:26 ` [Qemu-devel] Useful Q&A Benjamin Brown
2004-06-16 20:35   ` Bartosz Fabianowski
2004-06-17 10:42     ` Antony T Curtis
2004-06-16 21:02   ` Fabrice Bellard
2004-06-16 21:16     ` malc
2004-06-16 21:41     ` Benjamin Brown
2004-06-17  8:25       ` Johannes Schindelin
2004-06-19 17:35         ` Benjamin Brown
2004-06-19 16:34       ` [Qemu-devel] Mounting a disk image under Linux Benjamin Brown
2004-06-19 16:39         ` Grzegorz Kulewski
2004-06-19 16:40         ` Gianni Tedesco
2004-06-19 17:16           ` Benjamin Brown
2004-06-19 17:31         ` Jim C. Brown
2004-06-19 20:00           ` Gianni Tedesco
2004-06-19 23:48             ` Jim C. Brown
2004-06-20  8:20               ` Mulyadi Santosa [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200406201520.24153.a_mulyadi@softhome.net \
    --to=a_mulyadi@softhome.net \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).