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;
}
prev parent 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).