OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "bin/directory.h" | 5 #include "bin/directory.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <sys/stat.h> | 8 #include <sys/stat.h> |
9 | 9 |
10 #include "bin/platform.h" | 10 #include "bin/platform.h" |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 GetCurrentDirectory(length + 1, result); | 331 GetCurrentDirectory(length + 1, result); |
332 return result; | 332 return result; |
333 } | 333 } |
334 | 334 |
335 | 335 |
336 bool Directory::Create(const char* dir_name) { | 336 bool Directory::Create(const char* dir_name) { |
337 return (CreateDirectory(dir_name, NULL) != 0); | 337 return (CreateDirectory(dir_name, NULL) != 0); |
338 } | 338 } |
339 | 339 |
340 | 340 |
341 int Directory::CreateTemp(const char* const_template, | 341 char* Directory::CreateTemp(const char* const_template) { |
342 char** path, | |
343 char* os_error_message, | |
344 int os_error_message_len) { | |
345 // Returns a new, unused directory name, modifying the contents of | 342 // Returns a new, unused directory name, modifying the contents of |
346 // dir_template. Creates this directory, with a default security | 343 // dir_template. Creates this directory, with a default security |
347 // descriptor inherited from its parent directory. | 344 // descriptor inherited from its parent directory. |
348 // The return value must be freed by the caller. | 345 // The return value must be freed by the caller. |
349 *path = static_cast<char*>(malloc(MAX_PATH)); | 346 char* path = static_cast<char*>(malloc(MAX_PATH)); |
350 int path_length; | 347 int path_length; |
351 if (0 == strncmp(const_template, "", 1)) { | 348 if (0 == strncmp(const_template, "", 1)) { |
352 path_length = GetTempPath(MAX_PATH, *path); | 349 path_length = GetTempPath(MAX_PATH, path); |
353 if (path_length == 0) { | 350 if (path_length == 0) { |
354 free(*path); | 351 free(path); |
355 *path = NULL; | 352 return NULL; |
356 int error_code = | |
357 SetOsErrorMessage(os_error_message, os_error_message_len); | |
358 return error_code; | |
359 } | 353 } |
360 } else { | 354 } else { |
361 snprintf(*path, MAX_PATH, "%s", const_template); | 355 snprintf(path, MAX_PATH, "%s", const_template); |
362 path_length = strlen(*path); | 356 path_length = strlen(path); |
363 } | 357 } |
364 // Length of tempdir-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx is 44. | 358 // Length of tempdir-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx is 44. |
365 if (path_length > MAX_PATH - 44) { | 359 if (path_length > MAX_PATH - 44) { |
366 free(*path); | 360 free(path); |
367 *path = NULL; | 361 return NULL; |
368 return -1; | |
369 } | 362 } |
370 if ((*path)[path_length - 1] == '\\') { | 363 if ((path)[path_length - 1] == '\\') { |
371 // No base name for the directory - use "tempdir". | 364 // No base name for the directory - use "tempdir". |
372 snprintf(*path + path_length, MAX_PATH - path_length, "tempdir"); | 365 snprintf(path + path_length, MAX_PATH - path_length, "tempdir"); |
373 path_length = strlen(*path); | 366 path_length = strlen(path); |
374 } | 367 } |
375 | 368 |
376 UUID uuid; | 369 UUID uuid; |
377 RPC_STATUS status = UuidCreateSequential(&uuid); | 370 RPC_STATUS status = UuidCreateSequential(&uuid); |
378 if (status != RPC_S_OK && status != RPC_S_UUID_LOCAL_ONLY) { | 371 if (status != RPC_S_OK && status != RPC_S_UUID_LOCAL_ONLY) { |
379 free(*path); | 372 free(path); |
380 *path = NULL; | 373 return NULL; |
381 int error_code = | |
382 SetOsErrorMessage(os_error_message, os_error_message_len); | |
383 return error_code; | |
384 } | 374 } |
385 RPC_CSTR uuid_string; | 375 RPC_CSTR uuid_string; |
386 status = UuidToString(&uuid, &uuid_string); | 376 status = UuidToString(&uuid, &uuid_string); |
387 if (status != RPC_S_OK) { | 377 if (status != RPC_S_OK) { |
388 free(*path); | 378 free(path); |
389 *path = NULL; | 379 return NULL; |
390 int error_code = | |
391 SetOsErrorMessage(os_error_message, os_error_message_len); | |
392 return error_code; | |
393 } | 380 } |
394 | 381 |
395 snprintf(*path + path_length, MAX_PATH - path_length, "-%s", uuid_string); | 382 snprintf(path + path_length, MAX_PATH - path_length, "-%s", uuid_string); |
396 if (!CreateDirectory(*path, NULL)) { | 383 if (!CreateDirectory(path, NULL)) { |
397 free(*path); | 384 free(path); |
398 *path = NULL; | 385 return NULL; |
399 int error_code = | |
400 SetOsErrorMessage(os_error_message, os_error_message_len); | |
401 return error_code; | |
402 } | 386 } |
403 return 0; | 387 return path; |
404 } | 388 } |
405 | 389 |
406 | 390 |
407 bool Directory::Delete(const char* dir_name, bool recursive) { | 391 bool Directory::Delete(const char* dir_name, bool recursive) { |
408 if (!recursive) { | 392 if (!recursive) { |
409 return (RemoveDirectory(dir_name) != 0); | 393 return (RemoveDirectory(dir_name) != 0); |
410 } else { | 394 } else { |
411 return DeleteRecursively(dir_name); | 395 return DeleteRecursively(dir_name); |
412 } | 396 } |
413 } | 397 } |
OLD | NEW |