Changeset 551 for trunk/dll/copyf.c
- Timestamp:
- Feb 28, 2007, 2:33:51 AM (19 years ago)
- File:
-
- 1 edited
-
trunk/dll/copyf.c (modified) (25 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/copyf.c
r347 r551 38 38 39 39 #ifndef WinMoveObject 40 HOBJECT APIENTRY WinMoveObject(HOBJECT hObjectofObject, 41 HOBJECT hObjectofDest, 42 ULONG ulReserved); 40 HOBJECT APIENTRY WinMoveObject(HOBJECT hObjectofObject, 41 HOBJECT hObjectofDest, ULONG ulReserved); 43 42 #endif 44 43 #ifndef WinCopyObject 45 HOBJECT APIENTRY WinCopyObject(HOBJECT hObjectofObject, 46 HOBJECT hObjectofDest, 47 ULONG ulReserved); 44 HOBJECT APIENTRY WinCopyObject(HOBJECT hObjectofObject, 45 HOBJECT hObjectofDest, ULONG ulReserved); 48 46 #endif 49 47 … … 53 51 #pragma alloc_text(UNLINKF,unlinkf,unlink_allf,make_deleteable,wipeallf) 54 52 55 56 char *MakeTempName (char *buffer) 53 char *MakeTempName(char *buffer) 57 54 { 58 55 FILESTATUS3 fs3; 59 APIRET rc;60 char *p,*o;56 APIRET rc; 57 char *p, *o; 61 58 62 59 p = o = buffer + strlen(buffer); 63 sprintf(p, "%08lx.%03lx",clock(),mypid);60 sprintf(p, "%08lx.%03lx", clock(), mypid); 64 61 p = buffer + (strlen(buffer) - 1); 65 for (;;) {62 for (;;) { 66 63 DosError(FERR_DISABLEHARDERR); 67 rc = DosQueryPathInfo(buffer,FIL_STANDARD,&fs3, 68 (ULONG)sizeof(fs3)); 69 if(rc == ERROR_DISK_CHANGE) { 64 rc = DosQueryPathInfo(buffer, FIL_STANDARD, &fs3, (ULONG) sizeof(fs3)); 65 if (rc == ERROR_DISK_CHANGE) { 70 66 DosError(FERR_ENABLEHARDERR); 71 rc = DosQueryPathInfo(buffer,FIL_STANDARD,&fs3, 72 (ULONG)sizeof(fs3)); 73 } 74 if(rc) 67 rc = DosQueryPathInfo(buffer, FIL_STANDARD, &fs3, (ULONG) sizeof(fs3)); 68 } 69 if (rc) 75 70 break; 76 Loop:77 if (p < o) {71 Loop: 72 if (p < o) { 78 73 *buffer = 0; 79 74 return NULL; 80 75 } 81 if ((*p) + 1 < 'Z' + 1) {76 if ((*p) + 1 < 'Z' + 1) { 82 77 (*p)++; 83 while (strchr("*?<>\":/\\|+=;,[]. ",*p))84 (*p)++;78 while (strchr("*?<>\":/\\|+=;,[]. ", *p)) 79 (*p)++; 85 80 *p = toupper(*p); 86 81 } 87 82 else { 88 83 p--; 89 if (p >= o && *p == '.')90 p--;84 if (p >= o && *p == '.') 85 p--; 91 86 goto Loop; 92 87 } … … 95 90 } 96 91 97 98 CHAR *TruncName (CHAR *oldname,CHAR *buffer) 99 { 100 CHAR *p,*f,*s,*o; 92 CHAR *TruncName(CHAR * oldname, CHAR * buffer) 93 { 94 CHAR *p, *f, *s, *o; 101 95 FILESTATUS3 fs3; 102 APIRET rc;103 104 if (!buffer || !oldname || !*oldname) {105 if (buffer)96 APIRET rc; 97 98 if (!buffer || !oldname || !*oldname) { 99 if (buffer) 106 100 *buffer = 0; 107 101 return NULL; 108 102 } 109 strcpy(buffer, oldname);110 f = strrchr(buffer, '\\');111 if (!f)112 f = strrchr(buffer, '/');113 if (!f)103 strcpy(buffer, oldname); 104 f = strrchr(buffer, '\\'); 105 if (!f) 106 f = strrchr(buffer, '/'); 107 if (!f) 114 108 f = buffer; 115 109 else … … 119 113 f = oldname + (f - buffer); 120 114 strupr(buffer); 121 while (*f == '.')/* skip leading '.'s */115 while (*f == '.') /* skip leading '.'s */ 122 116 f++; 123 117 s = f; 124 while (*f && *f != '.' && f < s + 8) {/* skip past rootname */118 while (*f && *f != '.' && f < s + 8) { /* skip past rootname */ 125 119 *p = toupper(*f); 126 120 p++; 127 121 f++; 128 122 } 129 while (*f == '.')123 while (*f == '.') 130 124 f++; 131 125 s = f; 132 f = strrchr(f, '.');133 if (f) {134 while (*f == '.')126 f = strrchr(f, '.'); 127 if (f) { 128 while (*f == '.') 135 129 f++; 136 130 } 137 if (f && *(f + 1))131 if (f && *(f + 1)) 138 132 s = f; 139 133 else 140 134 f = s; 141 if (*f) {135 if (*f) { 142 136 *p = '.'; 143 137 p++; 144 while (*f && *f != '.' && f < s + 3) {138 while (*f && *f != '.' && f < s + 3) { 145 139 *p = toupper(*f); 146 140 p++; … … 151 145 152 146 p = o; 153 while (*p) {154 if (strchr("*?<>\":/\\|+=;,[] ",*p) || *p < 0x20)147 while (*p) { 148 if (strchr("*?<>\":/\\|+=;,[] ", *p) || *p < 0x20) 155 149 *p = '_'; 156 if (*p == '.' && *(p + 1) == '.')150 if (*p == '.' && *(p + 1) == '.') 157 151 *(p + 1) = '_'; 158 152 p++; … … 160 154 161 155 p = o + (strlen(o) - 1); 162 for (;;) {156 for (;;) { 163 157 DosError(FERR_DISABLEHARDERR); 164 rc = DosQueryPathInfo(buffer,FIL_STANDARD,&fs3, 165 (ULONG)sizeof(fs3)); 166 if(rc == ERROR_DISK_CHANGE) { 158 rc = DosQueryPathInfo(buffer, FIL_STANDARD, &fs3, (ULONG) sizeof(fs3)); 159 if (rc == ERROR_DISK_CHANGE) { 167 160 DosError(FERR_ENABLEHARDERR); 168 rc = DosQueryPathInfo(buffer,FIL_STANDARD,&fs3, 169 (ULONG)sizeof(fs3)); 170 } 171 if(rc) 161 rc = DosQueryPathInfo(buffer, FIL_STANDARD, &fs3, (ULONG) sizeof(fs3)); 162 } 163 if (rc) 172 164 break; 173 Loop:174 if (p < o) {165 Loop: 166 if (p < o) { 175 167 *buffer = 0; 176 168 return NULL; 177 169 } 178 if ((*p) + 1 < 'Z' + 1) {170 if ((*p) + 1 < 'Z' + 1) { 179 171 (*p)++; 180 while (strchr("*?<>\":/\\|+=;,[]. ",*p))181 (*p)++;172 while (strchr("*?<>\":/\\|+=;,[]. ", *p)) 173 (*p)++; 182 174 *p = toupper(*p); 183 175 } 184 176 else { 185 177 p--; 186 if (p >= o && *p == '.')187 p--;178 if (p >= o && *p == '.') 179 p--; 188 180 goto Loop; 189 181 } … … 192 184 } 193 185 194 195 CHAR *GetLongName (CHAR *oldname,CHAR *longname) 196 { 197 if(!longname) 186 CHAR *GetLongName(CHAR * oldname, CHAR * longname) 187 { 188 if (!longname) 198 189 return NULL; 199 190 *longname = 0; 200 if(!oldname || 201 !*oldname) 191 if (!oldname || !*oldname) 202 192 return NULL; 203 if (IsFullName(oldname)) {204 205 APIRET rc;206 EAOP2 eaop;193 if (IsFullName(oldname)) { 194 195 APIRET rc; 196 EAOP2 eaop; 207 197 PGEA2LIST pgealist; 208 198 PFEA2LIST pfealist; 209 PGEA2 pgea; 210 PFEA2 pfea; 211 CHAR *value; 212 213 strcpy(longname, 214 oldname); 199 PGEA2 pgea; 200 PFEA2 pfea; 201 CHAR *value; 202 203 strcpy(longname, oldname); 215 204 value = longname; 216 while (*value) {217 if (*value == '/')218 *value = '\\';205 while (*value) { 206 if (*value == '/') 207 *value = '\\'; 219 208 value++; 220 209 } 221 value = strrchr(longname, '\\');222 if (value) {210 value = strrchr(longname, '\\'); 211 if (value) { 223 212 value++; 224 213 *value = 0; 225 214 } 226 pgealist = xmallocz(sizeof(GEA2LIST) + 32, pszSrcFile,__LINE__);215 pgealist = xmallocz(sizeof(GEA2LIST) + 32, pszSrcFile, __LINE__); 227 216 if (pgealist) { 228 217 pgea = &pgealist->list[0]; 229 strcpy(pgea->szName, LONGNAME);218 strcpy(pgea->szName, LONGNAME); 230 219 pgea->cbName = strlen(pgea->szName); 231 220 pgea->oNextEntryOffset = 0L; 232 221 pgealist->cbList = (sizeof(GEA2LIST) + pgea->cbName); 233 pfealist = xmallocz(1536, pszSrcFile,__LINE__);222 pfealist = xmallocz(1536, pszSrcFile, __LINE__); 234 223 if (pfealist) { 235 pfealist->cbList = 1024; 236 eaop.fpGEA2List = pgealist; 237 eaop.fpFEA2List = pfealist; 238 eaop.oError = 0L; 239 DosError(FERR_DISABLEHARDERR); 240 rc = DosQueryPathInfo(oldname, 241 FIL_QUERYEASFROMLIST, 242 (PVOID)&eaop, 243 (ULONG)sizeof(EAOP2)); 244 if(!rc) { 245 pfea = &eaop.fpFEA2List->list[0]; 246 value = pfea->szName + pfea->cbName + 1; 247 value[pfea->cbValue] = 0; 248 if(*(USHORT *)value == EAT_ASCII) 249 strncat(longname, 250 value + (sizeof(USHORT) * 2), 251 CCHMAXPATH - strlen(longname)); 252 longname[CCHMAXPATH - 1] = 0; 253 } 254 free(pfealist); 224 pfealist->cbList = 1024; 225 eaop.fpGEA2List = pgealist; 226 eaop.fpFEA2List = pfealist; 227 eaop.oError = 0L; 228 DosError(FERR_DISABLEHARDERR); 229 rc = DosQueryPathInfo(oldname, 230 FIL_QUERYEASFROMLIST, 231 (PVOID) & eaop, (ULONG) sizeof(EAOP2)); 232 if (!rc) { 233 pfea = &eaop.fpFEA2List->list[0]; 234 value = pfea->szName + pfea->cbName + 1; 235 value[pfea->cbValue] = 0; 236 if (*(USHORT *) value == EAT_ASCII) 237 strncat(longname, 238 value + (sizeof(USHORT) * 2), 239 CCHMAXPATH - strlen(longname)); 240 longname[CCHMAXPATH - 1] = 0; 241 } 242 free(pfealist); 255 243 } 256 244 free(pgealist); … … 260 248 } 261 249 262 263 BOOL ZapLongName (char *filename) 250 BOOL ZapLongName(char *filename) 264 251 { 265 252 return WriteLongName(filename, ""); 266 253 } 267 254 268 269 BOOL WriteLongName (CHAR *filename,CHAR *longname) 270 { 271 APIRET rc; 272 EAOP2 eaop; 255 BOOL WriteLongName(CHAR * filename, CHAR * longname) 256 { 257 APIRET rc; 258 EAOP2 eaop; 273 259 PFEA2LIST pfealist = NULL; 274 ULONG ealen; 275 USHORT len; 276 CHAR *eaval,*p; 277 278 if(!filename || 279 !*filename || 280 !longname) 260 ULONG ealen; 261 USHORT len; 262 CHAR *eaval, *p; 263 264 if (!filename || !*filename || !longname) 281 265 return FALSE; 282 p = strrchr(longname,'\\'); 283 if(p) 284 memmove(longname, 285 p + 1, 286 strlen(p + 1) + 1); 287 p = strrchr(longname,'/'); 288 if(p) 289 memmove(longname, 290 p + 1, 291 strlen(p + 1) + 1); 266 p = strrchr(longname, '\\'); 267 if (p) 268 memmove(longname, p + 1, strlen(p + 1) + 1); 269 p = strrchr(longname, '/'); 270 if (p) 271 memmove(longname, p + 1, strlen(p + 1) + 1); 292 272 bstrip(longname); 293 273 len = strlen(longname); 294 if (len)274 if (len) 295 275 ealen = sizeof(FEA2LIST) + 10 + len + 4; 296 276 else 297 277 ealen = sizeof(FEALIST) + 10; 298 rc = DosAllocMem((PPVOID)&pfealist, 299 ealen + 32L, 300 OBJ_TILE | PAG_COMMIT | PAG_READ | PAG_WRITE); 278 rc = DosAllocMem((PPVOID) & pfealist, 279 ealen + 32L, OBJ_TILE | PAG_COMMIT | PAG_READ | PAG_WRITE); 301 280 if (rc) 302 Dos_Error(MB_CANCEL,rc,HWND_DESKTOP,pszSrcFile,__LINE__,GetPString(IDS_OUTOFMEMORY)); 281 Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__, 282 GetPString(IDS_OUTOFMEMORY)); 303 283 else { 304 memset(pfealist, 305 0, 306 ealen + 1); 284 memset(pfealist, 0, ealen + 1); 307 285 pfealist->cbList = ealen; 308 286 pfealist->list[0].oNextEntryOffset = 0L; 309 287 pfealist->list[0].fEA = 0; 310 288 pfealist->list[0].cbName = 9; 311 strcpy(pfealist->list[0].szName, 312 LONGNAME); 313 if(len) { 289 strcpy(pfealist->list[0].szName, LONGNAME); 290 if (len) { 314 291 eaval = pfealist->list[0].szName + 10; 315 *(USHORT *) eaval = (USHORT)EAT_ASCII;292 *(USHORT *) eaval = (USHORT) EAT_ASCII; 316 293 eaval += sizeof(USHORT); 317 *(USHORT *) eaval = (USHORT)len;294 *(USHORT *) eaval = (USHORT) len; 318 295 eaval += sizeof(USHORT); 319 memcpy(eaval, 320 longname, 321 len); 296 memcpy(eaval, longname, len); 322 297 pfealist->list[0].cbValue = len + (sizeof(USHORT) * 2); 323 298 } 324 299 else 325 300 pfealist->list[0].cbValue = 0; 326 eaop.fpGEA2List = (PGEA2LIST) 0;301 eaop.fpGEA2List = (PGEA2LIST) 0; 327 302 eaop.fpFEA2List = pfealist; 328 303 eaop.oError = 0L; 329 304 DosError(FERR_DISABLEHARDERR); 330 305 rc = DosSetPathInfo(filename, 331 FIL_QUERYEASIZE, 332 (PVOID)&eaop, 333 (ULONG)sizeof(EAOP2), 334 DSPI_WRTTHRU); 306 FIL_QUERYEASIZE, 307 (PVOID) & eaop, (ULONG) sizeof(EAOP2), DSPI_WRTTHRU); 335 308 DosFreeMem(pfealist); 336 if (rc)309 if (rc) 337 310 return FALSE; 338 311 } … … 340 313 } 341 314 342 343 BOOL AdjustWildcardName (CHAR *oldname,CHAR *newname) 315 BOOL AdjustWildcardName(CHAR * oldname, CHAR * newname) 344 316 { 345 317 BOOL ret = FALSE; … … 347 319 /* NOTE: newname should be CCHMAXPATH chars long! */ 348 320 349 if(strchr(newname,'*') || strchr(newname,'?')) { 350 351 CHAR srce[CCHMAXPATHCOMP],dest[CCHMAXPATHCOMP],result[CCHMAXPATHCOMP],*p; 352 353 p = strrchr(newname,'\\'); 354 if(p && *(p + 1)) { 355 strcpy(dest,p + 1); 356 p = strrchr(oldname,'\\'); 357 if(p && *(p + 1)) { 358 strcpy(srce,p + 1); 359 DosError(FERR_DISABLEHARDERR); 360 if(!DosEditName(1L,srce,dest,result,(ULONG)sizeof(result))) { 361 p = strrchr(newname,'\\'); 362 p++; 363 strcpy(p,result); 364 ret = TRUE; 365 } 321 if (strchr(newname, '*') || strchr(newname, '?')) { 322 323 CHAR srce[CCHMAXPATHCOMP], dest[CCHMAXPATHCOMP], result[CCHMAXPATHCOMP], 324 *p; 325 326 p = strrchr(newname, '\\'); 327 if (p && *(p + 1)) { 328 strcpy(dest, p + 1); 329 p = strrchr(oldname, '\\'); 330 if (p && *(p + 1)) { 331 strcpy(srce, p + 1); 332 DosError(FERR_DISABLEHARDERR); 333 if (!DosEditName(1L, srce, dest, result, (ULONG) sizeof(result))) { 334 p = strrchr(newname, '\\'); 335 p++; 336 strcpy(p, result); 337 ret = TRUE; 338 } 366 339 } 367 340 } … … 370 343 } 371 344 372 373 CHAR default_disk (VOID) 374 { 375 ULONG ulDriveNum,ulDriveMap; 345 CHAR default_disk(VOID) 346 { 347 ULONG ulDriveNum, ulDriveMap; 376 348 377 349 DosError(FERR_DISABLEHARDERR); 378 DosQCurDisk(&ulDriveNum,&ulDriveMap); 379 return (CHAR)toupper((INT)ulDriveNum) + '@'; 380 } 381 350 DosQCurDisk(&ulDriveNum, &ulDriveMap); 351 return (CHAR) toupper((INT) ulDriveNum) + '@'; 352 } 382 353 383 354 #ifdef NEVER 384 355 385 APIRET docopyallf (INT type,CHAR *oldname,CHAR *newname,...)356 APIRET docopyallf(INT type, CHAR * oldname, CHAR * newname, ...) 386 357 { 387 358 FILEFINDBUF3 fb; 388 ULONG nm;389 HDIR hdir;390 APIRET rc = 0;391 CHAR *enddir,fullname[CCHMAXPATH];392 393 va_start(ap, newname);394 vsprintf(fullname, newname,ap);359 ULONG nm; 360 HDIR hdir; 361 APIRET rc = 0; 362 CHAR *enddir, fullname[CCHMAXPATH]; 363 364 va_start(ap, newname); 365 vsprintf(fullname, newname, ap); 395 366 va_end(ap); 396 367 397 368 DosError(FERR_DISABLEHARDERR); 398 if (!DosFindFirst(oldname)) {369 if (!DosFindFirst(oldname)) { 399 370 do { 400 371 401 372 /* build target name */ 402 373 403 if (fb.attrFile & FILE_DIRECTORY) {404 DosError(FERR_ENABLEHARDERR);405 rc = DosCreateDir();406 if(rc == ERROR_INVALID_NAME || rc == ERROR_FILENAME_EXCED_RANGE) {407 408 /* truncate directory name */409 /* create that directory */410 /* update containers for name used */411 412 }413 rc = docopyallf(type,,"%s",);/* recurse */374 if (fb.attrFile & FILE_DIRECTORY) { 375 DosError(FERR_ENABLEHARDERR); 376 rc = DosCreateDir(); 377 if (rc == ERROR_INVALID_NAME || rc == ERROR_FILENAME_EXCED_RANGE) { 378 379 /* truncate directory name */ 380 /* create that directory */ 381 /* update containers for name used */ 382 383 } 384 rc = docopyallf(type,, "%s",); /* recurse */ 414 385 } 415 386 else 416 rc = docopyf(type,,"%s",);/* copy file */387 rc = docopyf(type,, "%s",); /* copy file */ 417 388 DosError(FERR_DISABLEHARDERR); 418 } while (!rc && !DosFindNext());389 } while (!rc && !DosFindNext()); 419 390 DosFindClose(hdir); 420 391 } … … 426 397 #endif 427 398 428 429 APIRET docopyf (INT type,CHAR *oldname,CHAR *newname,...) 399 APIRET docopyf(INT type, CHAR * oldname, CHAR * newname, ...) 430 400 { 431 401 /* … … 438 408 */ 439 409 440 CHAR fullnewname[CCHMAXPATH + 1],longname[CCHMAXPATH],441 shortname[CCHMAXPATH];442 CHAR olddisk,newdisk,dir[CCHMAXPATH],*p,*pp;443 APIRET ret = -1,rc;444 FILESTATUS3 st, st2,dummy;445 BOOL diskchange = FALSE,zaplong = FALSE;446 va_list ap;410 CHAR fullnewname[CCHMAXPATH + 1], longname[CCHMAXPATH], 411 shortname[CCHMAXPATH]; 412 CHAR olddisk, newdisk, dir[CCHMAXPATH], *p, *pp; 413 APIRET ret = -1, rc; 414 FILESTATUS3 st, st2, dummy; 415 BOOL diskchange = FALSE, zaplong = FALSE; 416 va_list ap; 447 417 448 418 *fullnewname = *shortname = *dir = 0; 449 419 450 va_start(ap, 451 newname); 452 vsprintf(fullnewname, 453 newname, 454 ap); 420 va_start(ap, newname); 421 vsprintf(fullnewname, newname, ap); 455 422 va_end(ap); 456 423 457 if(!oldname || 458 !*oldname || 459 !*fullnewname) /* bad string args */ 460 return (APIRET)-1; 424 if (!oldname || !*oldname || !*fullnewname) /* bad string args */ 425 return (APIRET) - 1; 461 426 462 427 DosError(FERR_DISABLEHARDERR); 463 if(DosQueryPathInfo(oldname, 464 FIL_STANDARD, 465 &st, 466 sizeof(FILESTATUS3))) 467 return (APIRET)-2; /* no source */ 468 469 AdjustWildcardName(oldname, 470 fullnewname); 428 if (DosQueryPathInfo(oldname, FIL_STANDARD, &st, sizeof(FILESTATUS3))) 429 return (APIRET) - 2; /* no source */ 430 431 AdjustWildcardName(oldname, fullnewname); 471 432 MakeFullName(oldname); 472 433 MakeFullName(fullnewname); 473 olddisk = toupper(*oldname); /* source drive */474 newdisk = toupper(*fullnewname); /* destination drive */475 if (!(driveflags[toupper(*oldname) - 'A'] & DRIVE_NOLONGNAMES))434 olddisk = toupper(*oldname); /* source drive */ 435 newdisk = toupper(*fullnewname); /* destination drive */ 436 if (!(driveflags[toupper(*oldname) - 'A'] & DRIVE_NOLONGNAMES)) 476 437 *longname = 0; 477 else 478 { 438 else { 479 439 GetLongName(oldname, longname); 480 if (*longname) {440 if (*longname) { 481 441 p = RootName(longname); 482 if (p != longname)483 memmove(longname, p, strlen(p) + 1);442 if (p != longname) 443 memmove(longname, p, strlen(p) + 1); 484 444 } 485 445 } … … 487 447 p = RootName(oldname); 488 448 pp = RootName(fullnewname); 489 if(stricmp(p, pp)) 490 { 449 if (stricmp(p, pp)) { 491 450 zaplong = TRUE; 492 451 } 493 452 494 453 DosError(FERR_DISABLEHARDERR); 495 switch(type) 496 { 497 case WPSMOVE: 498 { 499 HOBJECT hobjsrc; 500 HOBJECT hobjdest; 501 502 ret = ERROR_FILE_NOT_FOUND; 503 hobjsrc = WinQueryObject(oldname); 504 if(hobjsrc) { 505 strcpy(dir, 506 fullnewname); 507 p = strrchr(dir,'\\'); 508 if(p < dir + 3) 509 p++; 510 *p = 0; 511 ret = ERROR_PATH_NOT_FOUND; 512 hobjdest = WinQueryObject(dir); 513 if(hobjdest) { 514 ret = ERROR_GEN_FAILURE; 515 hobjsrc = WinMoveObject(hobjsrc, 516 hobjdest, 517 0); 518 if(hobjsrc) 519 ret = 0; 520 } 521 } 522 } 523 return ret; 524 525 case WPSCOPY: 526 { 527 HOBJECT hobjsrc; 528 HOBJECT hobjdest; 529 530 ret = ERROR_FILE_NOT_FOUND; 531 hobjsrc = WinQueryObject(oldname); 532 if(hobjsrc) { 533 strcpy(dir, 534 fullnewname); 535 p = strrchr(dir,'\\'); 536 if(p < dir + 3) 537 p++; 538 *p = 0; 539 ret = ERROR_PATH_NOT_FOUND; 540 hobjdest = WinQueryObject(dir); 541 if(hobjdest) { 542 ret = ERROR_GEN_FAILURE; 543 hobjsrc = WinCopyObject(hobjsrc, 544 hobjdest, 545 0); 546 if(hobjsrc) 547 ret = 0; 548 } 549 } 550 } 551 return ret; 552 553 case MOVE: 554 *dir = 0; 555 if(olddisk == newdisk) { /* same drive */ 556 /* make temporary copy in case move fails */ 557 if(IsFile(fullnewname) != -1 && 558 stricmp(oldname, 559 fullnewname)) { 560 strcpy(dir, 561 fullnewname); 562 p = strrchr(dir,'\\'); 563 if(p) 564 *p = 0; 565 strcat(dir,"\\"); 566 MakeTempName(dir); 567 if(DosMove(fullnewname, 568 dir)) 569 *dir = 0; 570 } 571 DosError(FERR_DISABLEHARDERR); 572 ret = DosMove(oldname, 573 fullnewname); /* move it */ 574 if(ret && 575 *dir) { /* failed -- clean up */ 576 DosError(FERR_DISABLEHARDERR); 577 if(!DosMove(dir, 578 fullnewname)) 579 Broadcast((HAB)0, 580 hwndMain, 581 UM_UPDATERECORD, 582 MPFROMP(dir), 583 MPVOID); 584 } 585 else if(!ret && 586 *dir) { 587 if(!IsFile(dir)) { 588 if(!strchr(dir,'?') && 589 !strchr(dir,'*')) 590 wipeallf("%s\\*",dir); 591 DosError(FERR_DISABLEHARDERR); 592 if(DosDeleteDir(dir)) { 593 make_deleteable(dir); 594 DosDeleteDir(dir); 595 } 596 } 597 else if(IsFile(dir) > 0) { 598 DosError(FERR_DISABLEHARDERR); 599 if(DosForceDelete(dir)) { 600 make_deleteable(dir); 601 DosForceDelete(dir); 602 } 603 if(zaplong) 604 ZapLongName(dir); 605 Broadcast((HAB)0, 606 hwndMain, 607 UM_UPDATERECORD, 608 MPFROMP(dir), 609 MPVOID); 610 } 611 } 612 } 613 else { /* different drives */ 614 DosError(FERR_DISABLEHARDERR); 615 ret = DosCopy(oldname, 616 fullnewname, 617 DCPY_EXISTING); /* <=-NOTE! */ 618 if(ret == ERROR_DISK_CHANGE) { 619 DosError(FERR_ENABLEHARDERR); 620 ret = DosCopy(oldname, 621 fullnewname, 622 DCPY_EXISTING); 623 diskchange = TRUE; 624 } 625 if(ret == ERROR_INVALID_NAME || 626 ret == ERROR_FILENAME_EXCED_RANGE) { 627 if(TruncName(fullnewname, 628 shortname)) { /* make 8.3 filename */ 629 DosError(FERR_DISABLEHARDERR); 630 ret = DosCopy(oldname, 631 shortname, 632 DCPY_EXISTING); 633 if(!ret) { /* success -- write longname ea */ 634 WriteLongName(shortname, 635 fullnewname); 636 strcpy(fullnewname, 637 shortname); 638 /* broadcast fixup msg to windows */ 639 Broadcast((HAB)0, 640 hwndMain, 641 UM_UPDATERECORD, 642 MPFROMP(shortname), 643 MPVOID); 644 } 645 } 646 } 647 else if(!ret && 648 *longname) { 649 650 CHAR fixname[CCHMAXPATH]; 651 652 strcpy(fixname, 653 fullnewname); 654 p = strrchr(fixname,'\\'); 655 if(p) { 656 p++; 657 *p = 0; 658 } 659 strcat(fixname, 660 longname); 661 DosError(FERR_DISABLEHARDERR); 662 DosMove(fullnewname, 663 fixname); 664 strcpy(fullnewname, 665 fixname); 666 if(zaplong) 667 ZapLongName(fixname); 668 Broadcast((HAB)0, 669 hwndMain, 670 UM_UPDATERECORD, 671 MPFROMP(fixname), 672 MPVOID); 673 } 674 if(!ret) { /* double-check success */ 675 DosError(FERR_DISABLEHARDERR); 676 rc = DosQueryPathInfo(fullnewname, 677 FIL_STANDARD, 678 &st2, 679 sizeof(FILESTATUS3)); 680 if(rc == ERROR_DISK_CHANGE) { 681 DosError(FERR_ENABLEHARDERR); 682 rc = DosQueryPathInfo(fullnewname, 683 FIL_STANDARD, 684 &st2, 685 sizeof(FILESTATUS3)); 686 } 687 if(!rc && st2.cbFile == st.cbFile) { /* seems to have worked... */ 688 DosError(FERR_DISABLEHARDERR); 689 if(diskchange) { 690 DosError(FERR_ENABLEHARDERR); 691 DosQueryPathInfo(oldname, 692 FIL_STANDARD, 693 &dummy, 694 sizeof(FILESTATUS3)); /* force disk change */ 695 } 696 if(!(st2.attrFile & FILE_DIRECTORY)) /* erase file */ 697 unlinkf("%s",oldname); 698 else { /* remove directory */ 699 wipeallf("%s\\*",oldname); 700 DosError(FERR_DISABLEHARDERR); 701 if(DosDeleteDir(oldname)) { 702 make_deleteable(oldname); 703 DosDeleteDir(oldname); 704 } 705 } 706 } 707 } 708 } 709 return ret; 710 711 case COPY: 454 switch (type) { 455 case WPSMOVE: 456 { 457 HOBJECT hobjsrc; 458 HOBJECT hobjdest; 459 460 ret = ERROR_FILE_NOT_FOUND; 461 hobjsrc = WinQueryObject(oldname); 462 if (hobjsrc) { 463 strcpy(dir, fullnewname); 464 p = strrchr(dir, '\\'); 465 if (p < dir + 3) 466 p++; 467 *p = 0; 468 ret = ERROR_PATH_NOT_FOUND; 469 hobjdest = WinQueryObject(dir); 470 if (hobjdest) { 471 ret = ERROR_GEN_FAILURE; 472 hobjsrc = WinMoveObject(hobjsrc, hobjdest, 0); 473 if (hobjsrc) 474 ret = 0; 475 } 476 } 477 } 478 return ret; 479 480 case WPSCOPY: 481 { 482 HOBJECT hobjsrc; 483 HOBJECT hobjdest; 484 485 ret = ERROR_FILE_NOT_FOUND; 486 hobjsrc = WinQueryObject(oldname); 487 if (hobjsrc) { 488 strcpy(dir, fullnewname); 489 p = strrchr(dir, '\\'); 490 if (p < dir + 3) 491 p++; 492 *p = 0; 493 ret = ERROR_PATH_NOT_FOUND; 494 hobjdest = WinQueryObject(dir); 495 if (hobjdest) { 496 ret = ERROR_GEN_FAILURE; 497 hobjsrc = WinCopyObject(hobjsrc, hobjdest, 0); 498 if (hobjsrc) 499 ret = 0; 500 } 501 } 502 } 503 return ret; 504 505 case MOVE: 506 *dir = 0; 507 if (olddisk == newdisk) { /* same drive */ 508 /* make temporary copy in case move fails */ 509 if (IsFile(fullnewname) != -1 && stricmp(oldname, fullnewname)) { 510 strcpy(dir, fullnewname); 511 p = strrchr(dir, '\\'); 512 if (p) 513 *p = 0; 514 strcat(dir, "\\"); 515 MakeTempName(dir); 516 if (DosMove(fullnewname, dir)) 517 *dir = 0; 518 } 712 519 DosError(FERR_DISABLEHARDERR); 713 ret = DosCopy(oldname, 714 fullnewname, 715 DCPY_EXISTING); /* <=-NOTE! */ 716 if(ret == ERROR_DISK_CHANGE) { 717 DosError(FERR_ENABLEHARDERR); 718 ret = DosCopy(oldname, 719 fullnewname, 720 DCPY_EXISTING); 721 diskchange = TRUE; 722 } 723 if(ret == ERROR_INVALID_NAME || 724 ret == ERROR_FILENAME_EXCED_RANGE) { 725 if(TruncName(fullnewname, 726 shortname)) { 727 DosError((diskchange) ? 728 FERR_ENABLEHARDERR : 729 FERR_DISABLEHARDERR); 730 ret = DosCopy(oldname, 731 shortname, 732 DCPY_EXISTING); 733 if(!ret) { 734 WriteLongName(shortname, 735 fullnewname); 736 strcpy(fullnewname, 737 shortname); 738 Broadcast((HAB)0, 739 hwndMain, 740 UM_UPDATERECORD, 741 MPFROMP(shortname), 742 MPVOID); 743 } 744 } 745 } 746 else if(!ret && 747 *longname) { 748 749 CHAR fixname[CCHMAXPATH]; 750 751 strcpy(fixname, 752 fullnewname); 753 p = strrchr(fixname,'\\'); 754 if(p) { 755 p++; 756 *p = 0; 757 } 758 strcat(fixname, 759 longname); 760 DosError(FERR_DISABLEHARDERR); 761 DosMove(fullnewname, 762 fixname); 763 if(zaplong) 764 ZapLongName(fixname); 765 Broadcast((HAB)0, 766 hwndMain, 767 UM_UPDATERECORD, 768 MPFROMP(fixname), 769 MPVOID); 770 } 771 return ret; 772 773 default: /* shouldn't happen */ 774 Runtime_Error(pszSrcFile, __LINE__, "bad case %u", type); 775 break; 776 } 777 return (APIRET)-3; /* bad type */ 778 } 779 780 781 INT make_deleteable (CHAR *filename) 520 ret = DosMove(oldname, fullnewname); /* move it */ 521 if (ret && *dir) { /* failed -- clean up */ 522 DosError(FERR_DISABLEHARDERR); 523 if (!DosMove(dir, fullnewname)) 524 Broadcast((HAB) 0, hwndMain, UM_UPDATERECORD, MPFROMP(dir), MPVOID); 525 } 526 else if (!ret && *dir) { 527 if (!IsFile(dir)) { 528 if (!strchr(dir, '?') && !strchr(dir, '*')) 529 wipeallf("%s\\*", dir); 530 DosError(FERR_DISABLEHARDERR); 531 if (DosDeleteDir(dir)) { 532 make_deleteable(dir); 533 DosDeleteDir(dir); 534 } 535 } 536 else if (IsFile(dir) > 0) { 537 DosError(FERR_DISABLEHARDERR); 538 if (DosForceDelete(dir)) { 539 make_deleteable(dir); 540 DosForceDelete(dir); 541 } 542 if (zaplong) 543 ZapLongName(dir); 544 Broadcast((HAB) 0, hwndMain, UM_UPDATERECORD, MPFROMP(dir), MPVOID); 545 } 546 } 547 } 548 else { /* different drives */ 549 DosError(FERR_DISABLEHARDERR); 550 ret = DosCopy(oldname, fullnewname, DCPY_EXISTING); /* <=-NOTE! */ 551 if (ret == ERROR_DISK_CHANGE) { 552 DosError(FERR_ENABLEHARDERR); 553 ret = DosCopy(oldname, fullnewname, DCPY_EXISTING); 554 diskchange = TRUE; 555 } 556 if (ret == ERROR_INVALID_NAME || ret == ERROR_FILENAME_EXCED_RANGE) { 557 if (TruncName(fullnewname, shortname)) { /* make 8.3 filename */ 558 DosError(FERR_DISABLEHARDERR); 559 ret = DosCopy(oldname, shortname, DCPY_EXISTING); 560 if (!ret) { /* success -- write longname ea */ 561 WriteLongName(shortname, fullnewname); 562 strcpy(fullnewname, shortname); 563 /* broadcast fixup msg to windows */ 564 Broadcast((HAB) 0, 565 hwndMain, UM_UPDATERECORD, MPFROMP(shortname), MPVOID); 566 } 567 } 568 } 569 else if (!ret && *longname) { 570 571 CHAR fixname[CCHMAXPATH]; 572 573 strcpy(fixname, fullnewname); 574 p = strrchr(fixname, '\\'); 575 if (p) { 576 p++; 577 *p = 0; 578 } 579 strcat(fixname, longname); 580 DosError(FERR_DISABLEHARDERR); 581 DosMove(fullnewname, fixname); 582 strcpy(fullnewname, fixname); 583 if (zaplong) 584 ZapLongName(fixname); 585 Broadcast((HAB) 0, 586 hwndMain, UM_UPDATERECORD, MPFROMP(fixname), MPVOID); 587 } 588 if (!ret) { /* double-check success */ 589 DosError(FERR_DISABLEHARDERR); 590 rc = DosQueryPathInfo(fullnewname, 591 FIL_STANDARD, &st2, sizeof(FILESTATUS3)); 592 if (rc == ERROR_DISK_CHANGE) { 593 DosError(FERR_ENABLEHARDERR); 594 rc = DosQueryPathInfo(fullnewname, 595 FIL_STANDARD, &st2, sizeof(FILESTATUS3)); 596 } 597 if (!rc && st2.cbFile == st.cbFile) { /* seems to have worked... */ 598 DosError(FERR_DISABLEHARDERR); 599 if (diskchange) { 600 DosError(FERR_ENABLEHARDERR); 601 DosQueryPathInfo(oldname, FIL_STANDARD, &dummy, sizeof(FILESTATUS3)); /* force disk change */ 602 } 603 if (!(st2.attrFile & FILE_DIRECTORY)) /* erase file */ 604 unlinkf("%s", oldname); 605 else { /* remove directory */ 606 wipeallf("%s\\*", oldname); 607 DosError(FERR_DISABLEHARDERR); 608 if (DosDeleteDir(oldname)) { 609 make_deleteable(oldname); 610 DosDeleteDir(oldname); 611 } 612 } 613 } 614 } 615 } 616 return ret; 617 618 case COPY: 619 DosError(FERR_DISABLEHARDERR); 620 ret = DosCopy(oldname, fullnewname, DCPY_EXISTING); /* <=-NOTE! */ 621 if (ret == ERROR_DISK_CHANGE) { 622 DosError(FERR_ENABLEHARDERR); 623 ret = DosCopy(oldname, fullnewname, DCPY_EXISTING); 624 diskchange = TRUE; 625 } 626 if (ret == ERROR_INVALID_NAME || ret == ERROR_FILENAME_EXCED_RANGE) { 627 if (TruncName(fullnewname, shortname)) { 628 DosError((diskchange) ? FERR_ENABLEHARDERR : FERR_DISABLEHARDERR); 629 ret = DosCopy(oldname, shortname, DCPY_EXISTING); 630 if (!ret) { 631 WriteLongName(shortname, fullnewname); 632 strcpy(fullnewname, shortname); 633 Broadcast((HAB) 0, 634 hwndMain, UM_UPDATERECORD, MPFROMP(shortname), MPVOID); 635 } 636 } 637 } 638 else if (!ret && *longname) { 639 640 CHAR fixname[CCHMAXPATH]; 641 642 strcpy(fixname, fullnewname); 643 p = strrchr(fixname, '\\'); 644 if (p) { 645 p++; 646 *p = 0; 647 } 648 strcat(fixname, longname); 649 DosError(FERR_DISABLEHARDERR); 650 DosMove(fullnewname, fixname); 651 if (zaplong) 652 ZapLongName(fixname); 653 Broadcast((HAB) 0, hwndMain, UM_UPDATERECORD, MPFROMP(fixname), MPVOID); 654 } 655 return ret; 656 657 default: /* shouldn't happen */ 658 Runtime_Error(pszSrcFile, __LINE__, "bad case %u", type); 659 break; 660 } 661 return (APIRET) - 3; /* bad type */ 662 } 663 664 INT make_deleteable(CHAR * filename) 782 665 { 783 666 INT ret = -1; … … 785 668 786 669 DosError(FERR_DISABLEHARDERR); 787 if(!DosQueryPathInfo(filename, 788 FIL_STANDARD, 789 &fsi, 790 sizeof(FILESTATUS3))) { 670 if (!DosQueryPathInfo(filename, FIL_STANDARD, &fsi, sizeof(FILESTATUS3))) { 791 671 fsi.attrFile = 0; 792 672 DosError(FERR_DISABLEHARDERR); 793 if(!DosSetPathInfo(filename, 794 FIL_STANDARD, 795 &fsi, 796 sizeof(FILESTATUS3), 797 0L)) 673 if (!DosSetPathInfo(filename, 674 FIL_STANDARD, &fsi, sizeof(FILESTATUS3), 0L)) 798 675 ret = 0; 799 676 } … … 801 678 } 802 679 803 804 INT wipeallf (CHAR *string,...) 680 INT wipeallf(CHAR * string, ...) 805 681 { 806 682 /* unlink everything from directory on down... */ 807 683 808 FILEFINDBUF3 *f;809 HDIR search_handle;810 ULONG num_matches;811 CHAR *p,*ss,*str;812 CHAR s[CCHMAXPATH],mask[257];813 va_list ap;814 INT rc;815 816 va_start(ap, string);817 vsprintf(s, string,ap);684 FILEFINDBUF3 *f; 685 HDIR search_handle; 686 ULONG num_matches; 687 CHAR *p, *ss, *str; 688 CHAR s[CCHMAXPATH], mask[257]; 689 va_list ap; 690 INT rc; 691 692 va_start(ap, string); 693 vsprintf(s, string, ap); 818 694 va_end(ap); 819 695 820 if (!*s)696 if (!*s) 821 697 return -1; 822 698 p = s; 823 while ((p = strchr(p,'/')) != NULL) {699 while ((p = strchr(p, '/')) != NULL) { 824 700 *p = '\\'; 825 701 p++; 826 702 } 827 703 828 str = xstrdup(s, pszSrcFile,__LINE__);829 if (!str)704 str = xstrdup(s, pszSrcFile, __LINE__); 705 if (!str) 830 706 return -1; 831 707 832 { /* safety net -- disallow deleting a root dir or partial name */708 { /* safety net -- disallow deleting a root dir or partial name */ 833 709 CHAR temp; 834 710 835 p = strrchr(str, '\\');836 if (p) {711 p = strrchr(str, '\\'); 712 if (p) { 837 713 p++; 838 714 temp = *p; 839 715 *p = 0; 840 if (IsRoot(str) || !IsFullName(str)) {841 /* under no circumstances! */842 Runtime_Error(pszSrcFile, __LINE__, "bad name %s", str);843 free(str);844 return -1;716 if (IsRoot(str) || !IsFullName(str)) { 717 /* under no circumstances! */ 718 Runtime_Error(pszSrcFile, __LINE__, "bad name %s", str); 719 free(str); 720 return -1; 845 721 } 846 722 *p = temp; … … 849 725 850 726 p = s; 851 p = strrchr(s, '\\');/* strip s to just path */852 if (!p)853 p = strrchr(s, ':');854 if (p) {727 p = strrchr(s, '\\'); /* strip s to just path */ 728 if (!p) 729 p = strrchr(s, ':'); 730 if (p) { 855 731 p++; 856 strncpy(mask, p,256);732 strncpy(mask, p, 256); 857 733 mask[256] = 0; 858 734 *p = 0; … … 863 739 } 864 740 865 ss = xmalloc(CCHMAXPATH, pszSrcFile,__LINE__);866 f = xmalloc(sizeof(FILEFINDBUF3), pszSrcFile,__LINE__);741 ss = xmalloc(CCHMAXPATH, pszSrcFile, __LINE__); 742 f = xmalloc(sizeof(FILEFINDBUF3), pszSrcFile, __LINE__); 867 743 if (!ss || !f) { 868 744 xfree(ss); … … 876 752 877 753 DosError(FERR_DISABLEHARDERR); 878 if (!DosFindFirst(str,&search_handle,FILE_NORMAL | FILE_DIRECTORY |879 FILE_SYSTEM | FILE_READONLY | FILE_HIDDEN | FILE_ARCHIVED,f,880 sizeof(FILEFINDBUF3),&num_matches,FIL_STANDARD)) {881 882 strcpy(ss, s);754 if (!DosFindFirst(str, &search_handle, FILE_NORMAL | FILE_DIRECTORY | 755 FILE_SYSTEM | FILE_READONLY | FILE_HIDDEN | FILE_ARCHIVED, 756 f, sizeof(FILEFINDBUF3), &num_matches, FIL_STANDARD)) { 757 758 strcpy(ss, s); 883 759 p = &ss[strlen(ss)]; 884 760 885 761 do { 886 strcpy(p, f->achName);887 if (f->attrFile & FILE_DIRECTORY) {888 if(strcmp(f->achName,".") && strcmp(f->achName,"..")) {889 wipeallf("%s/%s",ss,mask);/* recurse to wipe files */890 DosError(FERR_DISABLEHARDERR);891 if(DosDeleteDir(ss)) {/* remove directory */892 make_deleteable(ss);893 DosError(FERR_DISABLEHARDERR);894 DosDeleteDir(ss);895 }896 }762 strcpy(p, f->achName); 763 if (f->attrFile & FILE_DIRECTORY) { 764 if (strcmp(f->achName, ".") && strcmp(f->achName, "..")) { 765 wipeallf("%s/%s", ss, mask); /* recurse to wipe files */ 766 DosError(FERR_DISABLEHARDERR); 767 if (DosDeleteDir(ss)) { /* remove directory */ 768 make_deleteable(ss); 769 DosError(FERR_DISABLEHARDERR); 770 DosDeleteDir(ss); 771 } 772 } 897 773 } 898 774 else { 899 DosError(FERR_DISABLEHARDERR);900 if(DosForceDelete(ss)) {901 make_deleteable(ss);902 DosError(FERR_DISABLEHARDERR);903 rc = (INT)DosForceDelete(ss);904 if(rc)905 return rc;906 }775 DosError(FERR_DISABLEHARDERR); 776 if (DosForceDelete(ss)) { 777 make_deleteable(ss); 778 DosError(FERR_DISABLEHARDERR); 779 rc = (INT) DosForceDelete(ss); 780 if (rc) 781 return rc; 782 } 907 783 } 908 784 num_matches = 1L; 909 785 DosError(FERR_DISABLEHARDERR); 910 } while (!DosFindNext(search_handle,f,sizeof(FILEFINDBUF3),911 &num_matches));786 } while (!DosFindNext(search_handle, f, sizeof(FILEFINDBUF3), 787 &num_matches)); 912 788 DosFindClose(search_handle); 913 789 } … … 919 795 } 920 796 921 922 INT unlink_allf (CHAR *string,...) 797 INT unlink_allf(CHAR * string, ...) 923 798 { 924 799 /* wildcard delete */ 925 800 926 801 FILEFINDBUF3 *f; 927 HDIR search_handle;802 HDIR search_handle; 928 803 ULONG num_matches; 929 CHAR *p,*ss,*str;930 CHAR s[CCHMAXPATH];804 CHAR *p, *ss, *str; 805 CHAR s[CCHMAXPATH]; 931 806 va_list ap; 932 807 933 va_start(ap, string);934 vsprintf(s, string,ap);808 va_start(ap, string); 809 vsprintf(s, string, ap); 935 810 va_end(ap); 936 811 937 if (!*s)812 if (!*s) 938 813 return -1; 939 814 p = s; 940 while ((p = strchr(p,'/')) != NULL) {815 while ((p = strchr(p, '/')) != NULL) { 941 816 *p = '\\'; 942 817 p++; 943 818 } 944 819 945 str = xstrdup(s, pszSrcFile,__LINE__);820 str = xstrdup(s, pszSrcFile, __LINE__); 946 821 if (!str) 947 822 return -1; 948 823 949 824 p = s; 950 p = strrchr(s, '\\');/* strip s to just path */951 if (!p)952 p = strrchr(s, ':');953 if (p) {825 p = strrchr(s, '\\'); /* strip s to just path */ 826 if (!p) 827 p = strrchr(s, ':'); 828 if (p) { 954 829 p++; 955 830 *p = 0; … … 958 833 *s = 0; 959 834 960 ss = xmalloc(CCHMAXPATH, pszSrcFile,__LINE__);961 f = xmalloc(sizeof(FILEFINDBUF3), pszSrcFile,__LINE__);835 ss = xmalloc(CCHMAXPATH, pszSrcFile, __LINE__); 836 f = xmalloc(sizeof(FILEFINDBUF3), pszSrcFile, __LINE__); 962 837 if (!ss || !f) { 963 838 xfree(ss); … … 971 846 972 847 DosError(FERR_DISABLEHARDERR); 973 if (!DosFindFirst(str,&search_handle,FILE_NORMAL,f,974 sizeof(FILEFINDBUF3),&num_matches,FIL_STANDARD)) {975 976 strcpy(ss, s);848 if (!DosFindFirst(str, &search_handle, FILE_NORMAL, f, 849 sizeof(FILEFINDBUF3), &num_matches, FIL_STANDARD)) { 850 851 strcpy(ss, s); 977 852 p = &ss[strlen(ss)]; 978 853 979 854 do { 980 strcpy(p, f->achName);981 unlinkf("%s", ss);855 strcpy(p, f->achName); 856 unlinkf("%s", ss); 982 857 num_matches = 1L; 983 858 DosError(FERR_DISABLEHARDERR); 984 } while (!DosFindNext(search_handle,f,sizeof(FILEFINDBUF3),985 &num_matches));859 } while (!DosFindNext(search_handle, f, sizeof(FILEFINDBUF3), 860 &num_matches)); 986 861 DosFindClose(search_handle); 987 862 } … … 993 868 } 994 869 995 996 INT unlinkf (CHAR *string,...) 870 INT unlinkf(CHAR * string, ...) 997 871 { 998 872 CHAR buffer[CCHMAXPATH]; 999 873 va_list ap; 1000 874 1001 va_start(ap, string);1002 vsprintf(buffer, string,ap);875 va_start(ap, string); 876 vsprintf(buffer, string, ap); 1003 877 va_end(ap); 1004 878 1005 if (!strstr(buffer,ArcTempRoot)) {879 if (!strstr(buffer, ArcTempRoot)) { 1006 880 DosError(FERR_DISABLEHARDERR); 1007 if (DosDelete(buffer)) {881 if (DosDelete(buffer)) { 1008 882 make_deleteable(buffer); 1009 883 DosError(FERR_DISABLEHARDERR); … … 1013 887 else { 1014 888 DosError(FERR_DISABLEHARDERR); 1015 if (DosForceDelete(buffer)) {889 if (DosForceDelete(buffer)) { 1016 890 make_deleteable(buffer); 1017 891 DosError(FERR_DISABLEHARDERR); … … 1021 895 return 0; 1022 896 } 1023
Note:
See TracChangeset
for help on using the changeset viewer.
