ReactOS  0.4.14-dev-614-gbfd8a84
arcname.c File Reference
#include <freeldr.h>
Include dependency graph for arcname.c:

Go to the source code of this file.

Functions

BOOLEAN DissectArcPath (IN PCSTR ArcPath, OUT PCSTR *Path OPTIONAL, OUT PUCHAR DriveNumber, OUT PULONG PartitionNumber)
 
BOOLEAN DissectArcPath2 (IN PCSTR ArcPath, OUT PULONG x, OUT PULONG y, OUT PULONG z, OUT PULONG Partition, OUT PULONG PathSyntax)
 
VOID ConstructArcPath (PCHAR ArcPath, PCHAR SystemFolder, UCHAR Disk, ULONG Partition)
 

Function Documentation

◆ ConstructArcPath()

VOID ConstructArcPath ( PCHAR  ArcPath,
PCHAR  SystemFolder,
UCHAR  Disk,
ULONG  Partition 
)

Definition at line 175 of file arcname.c.

176 {
177  char tmp[50];
178 
179  strcpy(ArcPath, "multi(0)disk(0)");
180 
181  if (Disk < 0x80)
182  {
183  /*
184  * Floppy disk path:
185  * multi(0)disk(0)fdisk(x)\path
186  */
187  sprintf(tmp, "fdisk(%d)", (int) Disk);
188  strcat(ArcPath, tmp);
189  }
190  else
191  {
192  /*
193  * Hard disk path:
194  * multi(0)disk(0)rdisk(x)partition(y)\path
195  */
196  sprintf(tmp, "rdisk(%d)partition(%d)", (int) (Disk - 0x80), (int) Partition);
197  strcat(ArcPath, tmp);
198  }
199 
200  if (SystemFolder[0] == '\\' || SystemFolder[0] == '/')
201  {
202  strcat(ArcPath, SystemFolder);
203  }
204  else
205  {
206  strcat(ArcPath, "\\");
207  strcat(ArcPath, SystemFolder);
208  }
209 }
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
#define sprintf(buf, format,...)
Definition: sprintf.c:55
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388

Referenced by EditCustomBootReactOS().

◆ DissectArcPath()

BOOLEAN DissectArcPath ( IN PCSTR  ArcPath,
OUT PCSTR *Path  OPTIONAL,
OUT PUCHAR  DriveNumber,
OUT PULONG  PartitionNumber 
)

Definition at line 25 of file arcname.c.

30 {
31  PCCH p;
32 
33  /* Detect ramdisk path */
34  if (_strnicmp(ArcPath, "ramdisk(0)", 10) == 0)
35  {
36  /* Magic value for ramdisks */
37  *DriveNumber = 0x49;
38  *PartitionNumber = 1;
39 
40  /* Get the path (optional) */
41  if (Path)
42  *Path = ArcPath + 10;
43 
44  return TRUE;
45  }
46 
47  /* NOTE: We are currently limited when handling multi()disk() paths!! */
48  if (_strnicmp(ArcPath, "multi(0)disk(0)", 15) != 0)
49  return FALSE;
50 
51  p = ArcPath + 15;
52  if (_strnicmp(p, "fdisk(", 6) == 0)
53  {
54  /*
55  * Floppy disk path:
56  * multi(0)disk(0)fdisk(x)\path
57  */
58  p = p + 6;
59  *DriveNumber = atoi(p);
60  p = strchr(p, ')');
61  if (p == NULL)
62  return FALSE;
63  ++p;
64  *PartitionNumber = 0;
65  }
66  else if (_strnicmp(p, "cdrom(", 6) == 0)
67  {
68  /*
69  * Cdrom path:
70  * multi(0)disk(0)cdrom(x)\path
71  */
72  p = p + 6;
73  *DriveNumber = atoi(p) + 0x80;
74  p = strchr(p, ')');
75  if (p == NULL)
76  return FALSE;
77  ++p;
78  *PartitionNumber = 0xff;
79  }
80  else if (_strnicmp(p, "rdisk(", 6) == 0)
81  {
82  /*
83  * Hard disk path:
84  * multi(0)disk(0)rdisk(x)[partition(y)][\path]
85  */
86  p = p + 6;
87  *DriveNumber = atoi(p) + 0x80;
88  p = strchr(p, ')');
89  if (p == NULL)
90  return FALSE;
91  ++p;
92  /* The partition is optional */
93  if (_strnicmp(p, "partition(", 10) == 0)
94  {
95  p = p + 10;
97  p = strchr(p, ')');
98  if (p == NULL)
99  return FALSE;
100  ++p;
101  }
102  else
103  {
104  *PartitionNumber = 0;
105  }
106  }
107  else
108  {
109  return FALSE;
110  }
111 
112  /* Get the path (optional) */
113  if (Path)
114  *Path = p;
115 
116  return TRUE;
117 }
#define TRUE
Definition: types.h:120
_In_ ULONG _In_ ULONG PartitionNumber
Definition: iofuncs.h:2056
_Check_return_ _CRTIMP int __cdecl _strnicmp(_In_reads_or_z_(_MaxCount) const char *_Str1, _In_reads_or_z_(_MaxCount) const char *_Str2, _In_ size_t _MaxCount)
smooth NULL
Definition: ftsmooth.c:416
CONST CHAR * PCCH
Definition: ntbasedef.h:399
PRTL_UNICODE_STRING_BUFFER Path
char * strchr(const char *String, int ch)
Definition: utclib.c:501
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by DiskOpen().

◆ DissectArcPath2()

BOOLEAN DissectArcPath2 ( IN PCSTR  ArcPath,
OUT PULONG  x,
OUT PULONG  y,
OUT PULONG  z,
OUT PULONG  Partition,
OUT PULONG  PathSyntax 
)

Definition at line 121 of file arcname.c.

128 {
129  /* Detect ramdisk() */
130  if (_strnicmp(ArcPath, "ramdisk(0)", 10) == 0)
131  {
132  *x = *y = *z = 0;
133  *Partition = 1;
134  *PathSyntax = 2;
135  return TRUE;
136  }
137  /* Detect scsi()disk()rdisk()partition() */
138  else if (sscanf(ArcPath, "scsi(%lu)disk(%lu)rdisk(%lu)partition(%lu)", x, y, z, Partition) == 4)
139  {
140  *PathSyntax = 0;
141  return TRUE;
142  }
143  /* Detect scsi()cdrom()fdisk() */
144  else if (sscanf(ArcPath, "scsi(%lu)cdrom(%lu)fdisk(%lu)", x, y, z) == 3)
145  {
146  *Partition = 0;
147  *PathSyntax = 0;
148  return TRUE;
149  }
150  /* Detect multi()disk()rdisk()partition() */
151  else if (sscanf(ArcPath, "multi(%lu)disk(%lu)rdisk(%lu)partition(%lu)", x, y, z, Partition) == 4)
152  {
153  *PathSyntax = 1;
154  return TRUE;
155  }
156  /* Detect multi()disk()cdrom() */
157  else if (sscanf(ArcPath, "multi(%lu)disk(%lu)cdrom(%lu)", x, y, z) == 3)
158  {
159  *Partition = 1;
160  *PathSyntax = 1;
161  return TRUE;
162  }
163  /* Detect multi()disk()fdisk() */
164  else if (sscanf(ArcPath, "multi(%lu)disk(%lu)fdisk(%lu)", x, y, z) == 3)
165  {
166  *Partition = 1;
167  *PathSyntax = 1;
168  return TRUE;
169  }
170 
171  /* Unknown syntax */
172  return FALSE;
173 }
#define TRUE
Definition: types.h:120
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
_Check_return_ _CRTIMP int __cdecl _strnicmp(_In_reads_or_z_(_MaxCount) const char *_Str1, _In_reads_or_z_(_MaxCount) const char *_Str2, _In_ size_t _MaxCount)
GLdouble GLdouble z
Definition: glext.h:5874
_Check_return_ _CRTIMP int __cdecl sscanf(_In_z_ const char *_Src, _In_z_ _Scanf_format_string_ const char *_Format,...)
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548

Referenced by DiskOpen().