All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.