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 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.