diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 60 |
1 files changed, 55 insertions, 5 deletions
@@ -27,6 +27,8 @@ #include "scrounge.h" #include "compat.h" +#ifdef _WIN32 + const char kPrintHelp[] = "\ usage: scrounge -l \n\ List all drive partition information. \n\ @@ -45,6 +47,28 @@ usage: scrounge [-d drive] [-m mftoffset] [-c clustersize] [-o outdir] start end \n\ "; +#else /* Not WIN32 */ + +const char kPrintHelp[] = "\ +usage: scrounge -l \n\ + List all drive partition information. \n\ + \n\ +usage: scrounge -s disk \n\ + Search drive for NTFS partitions. \n\ + \n\ +usage: scrounge [-m mftoffset] [-c clustersize] [-o outdir] disk start end \n\ + Scrounge data from a partition \n\ + -m Offset to mft (in sectors) \n\ + -c Cluster size (in sectors, default of 8) \n\ + -o Directory to put scrounged files in \n\ + disk The raw disk partitios (ie: /dev/hda) \n\ + start First sector of partition \n\ + end Last sector of partition \n\ + \n\ +"; + +#endif + #define MODE_SCROUNGE 1 #define MODE_LIST 2 #define MODE_SEARCH 3 @@ -58,16 +82,22 @@ int main(int argc, char* argv[]) int temp = 0; int mode = 0; int raw = 0; - int drive = 0; partitioninfo pi; char driveName[MAX_PATH]; +#ifdef _WIN32 + int drive = 0; +#endif memset(&pi, 0, sizeof(pi)); /* TODO: We need to be able to autodetect the cluster size */ pi.cluster = 8; +#ifdef _WIN32 while((ch = getopt(argc, argv, "c:d:hlm:o:s")) != -1) +#else + while((ch = getopt(argc, argv, "c:hlm:o:s")) != -1) +#endif { switch(ch) { @@ -86,6 +116,7 @@ int main(int argc, char* argv[]) } break; +#ifdef _WIN32 /* drive number */ case 'd': { @@ -98,6 +129,7 @@ int main(int argc, char* argv[]) drive = temp; } break; +#endif /* help mode */ case 'h': @@ -156,6 +188,21 @@ int main(int argc, char* argv[]) argc -= optind; argv += optind; +#ifdef _WIN32 + /* Under windows we format the drive number */ + makeDriveName(driveName, drive); + +#else + /* Now when not under Windows, it's the drive name */ + if(argc < 1) + errx(2, "must specify drive name"); + + driveName = argv[0]; + argv++; + argc--; +#endif + + if(mode == MODE_SCROUNGE || mode == 0) { /* Get the sectors */ @@ -178,11 +225,10 @@ int main(int argc, char* argv[]) pi.end = temp; - makeDriveName(driveName, drive); - - pi.device = open(driveName, _O_BINARY | _O_RDONLY); + /* Open the device */ + pi.device = open(driveName, _O_BINARY | _O_RDONLY | OPEN_LARGE_OPTS); if(pi.device == -1) - err(1, "couldn't open drive"); + err(1, "couldn't open drive: %s", driveName); /* Use mft type search */ if(pi.mft != 0) @@ -205,7 +251,11 @@ int main(int argc, char* argv[]) /* List partition and drive info */ if(mode == MODE_LIST) +#ifdef _WIN32 scroungeList(); +#else + scroungeListDrive(driveName); +#endif /* Search for NTFS partitions */ if(mode == MODE_SEARCH) |