159{
160 const char *out_ptr = out_line, *exp_ptr = exp_line;
162
163 static const char pwd_cmd[] = {'@','p','w','d','@'};
164 static const char drive_cmd[] = {'@','d','r','i','v','e','@'};
165 static const char path_cmd[] = {'@','p','a','t','h','@'};
166 static const char shortpath_cmd[] = {'@','s','h','o','r','t','p','a','t','h','@'};
167 static const char space_cmd[] = {'@','s','p','a','c','e','@'};
168 static const char spaces_cmd[] = {'@','s','p','a','c','e','s','@'};
169 static const char tab_cmd[] = {'@','t','a','b','@'};
170 static const char or_broken_cmd[] = {'@','o','r','_','b','r','o','k','e','n','@'};
171
172 while(exp_ptr < exp_end) {
173 if(*exp_ptr == '@') {
174 if(exp_ptr+sizeof(pwd_cmd) <= exp_end
175 && !
memcmp(exp_ptr, pwd_cmd,
sizeof(pwd_cmd))) {
176 exp_ptr += sizeof(pwd_cmd);
181 }else {
183 continue;
184 }
185 } else if(exp_ptr+sizeof(drive_cmd) <= exp_end
186 && !
memcmp(exp_ptr, drive_cmd,
sizeof(drive_cmd))) {
187 exp_ptr += sizeof(drive_cmd);
192 }else {
194 continue;
195 }
196 } else if(exp_ptr+sizeof(path_cmd) <= exp_end
197 && !
memcmp(exp_ptr, path_cmd,
sizeof(path_cmd))) {
198 exp_ptr += sizeof(path_cmd);
203 }else {
205 continue;
206 }
207 } else if(exp_ptr+sizeof(shortpath_cmd) <= exp_end
208 && !
memcmp(exp_ptr, shortpath_cmd,
sizeof(shortpath_cmd))) {
209 exp_ptr += sizeof(shortpath_cmd);
214 }else {
216 continue;
217 }
218 }else if(exp_ptr+sizeof(space_cmd) <= exp_end
219 && !
memcmp(exp_ptr, space_cmd,
sizeof(space_cmd))) {
220 exp_ptr += sizeof(space_cmd);
221 if(out_ptr < out_end && *out_ptr == ' ') {
222 out_ptr++;
223 continue;
224 } else {
226 }
227 }else if(exp_ptr+sizeof(spaces_cmd) <= exp_end
228 && !
memcmp(exp_ptr, spaces_cmd,
sizeof(spaces_cmd))) {
229 exp_ptr += sizeof(spaces_cmd);
230 if(out_ptr < out_end && *out_ptr == ' ') {
231 while (out_ptr < out_end && *out_ptr == ' ') out_ptr++;
232 continue;
233 } else {
235 }
236 }else if(exp_ptr+sizeof(tab_cmd) <= exp_end
237 && !
memcmp(exp_ptr, tab_cmd,
sizeof(tab_cmd))) {
238 exp_ptr += sizeof(tab_cmd);
239 if(out_ptr < out_end && *out_ptr == '\t') {
240 out_ptr++;
241 continue;
242 } else {
244 }
245 }else if(exp_ptr+sizeof(or_broken_cmd) <= exp_end
246 && !
memcmp(exp_ptr, or_broken_cmd,
sizeof(or_broken_cmd))) {
247 if(out_ptr == out_end)
249 else
251 }else if(out_ptr == out_end || *out_ptr != *exp_ptr)
253 }else if(out_ptr == out_end || *out_ptr != *exp_ptr) {
255 }
256
260
261 while(exp_ptr+
sizeof(or_broken_cmd) <= exp_end &&
memcmp(exp_ptr, or_broken_cmd,
sizeof(or_broken_cmd)))
262 exp_ptr++;
263 exp_ptr += sizeof(or_broken_cmd);
264 if (exp_ptr > exp_end)
return err;
265 out_ptr = out_line;
267 continue;
268 }
269
270 exp_ptr++;
271 out_ptr++;
272 }
273
274 if(exp_ptr != exp_end)
275 return out_ptr;
276 else if(out_ptr != out_end)
277 return exp_end;
278
280}
INT WINAPI CompareStringA(LCID lcid, DWORD flags, LPCSTR str1, INT len1, LPCSTR str2, INT len2)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
static const DWORD drive_len
static char workdir[MAX_PATH]
static DWORD shortpath_len
static char shortpath[MAX_PATH]
#define LOCALE_SYSTEM_DEFAULT