diff options
| -rw-r--r-- | src/AFC.c | 43 | ||||
| -rw-r--r-- | src/AFC.h | 57 |
2 files changed, 51 insertions, 49 deletions
| @@ -341,7 +341,7 @@ static int receive_AFC_data(afc_client_t client, char **dump_here) | |||
| 341 | && header.entire_length == sizeof(AFCPacket)) { | 341 | && header.entire_length == sizeof(AFCPacket)) { |
| 342 | log_debug_msg("%s: Empty AFCPacket received!\n", __func__); | 342 | log_debug_msg("%s: Empty AFCPacket received!\n", __func__); |
| 343 | *dump_here = NULL; | 343 | *dump_here = NULL; |
| 344 | if (header.operation == AFC_SUCCESS_RESPONSE) { | 344 | if (header.operation == AFC_OP_DATA) { |
| 345 | return 0; | 345 | return 0; |
| 346 | } else { | 346 | } else { |
| 347 | client->afcerror = EIO; | 347 | client->afcerror = EIO; |
| @@ -396,13 +396,13 @@ static int receive_AFC_data(afc_client_t client, char **dump_here) | |||
| 396 | } | 396 | } |
| 397 | 397 | ||
| 398 | // check for errors | 398 | // check for errors |
| 399 | if (header.operation == AFC_SUCCESS_RESPONSE) { | 399 | if (header.operation == AFC_OP_DATA) { |
| 400 | // we got a positive response! | 400 | // we got a positive response! |
| 401 | log_debug_msg("%s: got a success response\n", __func__); | 401 | log_debug_msg("%s: got a success response\n", __func__); |
| 402 | } else if (header.operation == AFC_FILE_HANDLE) { | 402 | } else if (header.operation == AFC_OP_FILE_OPEN_RES) { |
| 403 | // we got a file handle response | 403 | // we got a file handle response |
| 404 | log_debug_msg("%s: got a file handle response, handle=%lld\n", __func__, param1); | 404 | log_debug_msg("%s: got a file handle response, handle=%lld\n", __func__, param1); |
| 405 | } else if (header.operation == AFC_ERROR) { | 405 | } else if (header.operation == AFC_OP_STATUS) { |
| 406 | // error message received | 406 | // error message received |
| 407 | if (param1 == 0) { | 407 | if (param1 == 0) { |
| 408 | // ERROR_SUCCESS, this is not an error! | 408 | // ERROR_SUCCESS, this is not an error! |
| @@ -418,7 +418,7 @@ static int receive_AFC_data(afc_client_t client, char **dump_here) | |||
| 418 | return -1; | 418 | return -1; |
| 419 | } | 419 | } |
| 420 | } else { | 420 | } else { |
| 421 | // unknown operation code received! | 421 | /* unknown operation code received */ |
| 422 | free(*dump_here); | 422 | free(*dump_here); |
| 423 | *dump_here = NULL; | 423 | *dump_here = NULL; |
| 424 | 424 | ||
| @@ -481,7 +481,7 @@ iphone_error_t afc_get_dir_list(afc_client_t client, const char *dir, char ***li | |||
| 481 | afc_lock(client); | 481 | afc_lock(client); |
| 482 | 482 | ||
| 483 | // Send the command | 483 | // Send the command |
| 484 | client->afc_packet->operation = AFC_LIST_DIR; | 484 | client->afc_packet->operation = AFC_OP_READ_DIR; |
| 485 | client->afc_packet->entire_length = 0; | 485 | client->afc_packet->entire_length = 0; |
| 486 | client->afc_packet->this_length = 0; | 486 | client->afc_packet->this_length = 0; |
| 487 | bytes = dispatch_AFC_packet(client, dir, strlen(dir)+1); | 487 | bytes = dispatch_AFC_packet(client, dir, strlen(dir)+1); |
| @@ -526,7 +526,7 @@ iphone_error_t afc_get_devinfo(afc_client_t client, char ***infos) | |||
| 526 | afc_lock(client); | 526 | afc_lock(client); |
| 527 | 527 | ||
| 528 | // Send the command | 528 | // Send the command |
| 529 | client->afc_packet->operation = AFC_GET_DEVINFO; | 529 | client->afc_packet->operation = AFC_OP_GET_DEVINFO; |
| 530 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 530 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 531 | bytes = dispatch_AFC_packet(client, NULL, 0); | 531 | bytes = dispatch_AFC_packet(client, NULL, 0); |
| 532 | if (bytes < 0) { | 532 | if (bytes < 0) { |
| @@ -545,6 +545,7 @@ iphone_error_t afc_get_devinfo(afc_client_t client, char ***infos) | |||
| 545 | free(data); | 545 | free(data); |
| 546 | 546 | ||
| 547 | afc_unlock(client); | 547 | afc_unlock(client); |
| 548 | |||
| 548 | *infos = list; | 549 | *infos = list; |
| 549 | return IPHONE_E_SUCCESS; | 550 | return IPHONE_E_SUCCESS; |
| 550 | } | 551 | } |
| @@ -569,7 +570,7 @@ iphone_error_t afc_delete_file(afc_client_t client, const char *path) | |||
| 569 | 570 | ||
| 570 | // Send command | 571 | // Send command |
| 571 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; | 572 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; |
| 572 | client->afc_packet->operation = AFC_DELETE; | 573 | client->afc_packet->operation = AFC_OP_REMOVE_PATH; |
| 573 | bytes = dispatch_AFC_packet(client, path, strlen(path)+1); | 574 | bytes = dispatch_AFC_packet(client, path, strlen(path)+1); |
| 574 | if (bytes <= 0) { | 575 | if (bytes <= 0) { |
| 575 | afc_unlock(client); | 576 | afc_unlock(client); |
| @@ -612,7 +613,7 @@ iphone_error_t afc_rename_file(afc_client_t client, const char *from, const char | |||
| 612 | memcpy(send, from, strlen(from) + 1); | 613 | memcpy(send, from, strlen(from) + 1); |
| 613 | memcpy(send + strlen(from) + 1, to, strlen(to) + 1); | 614 | memcpy(send + strlen(from) + 1, to, strlen(to) + 1); |
| 614 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 615 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 615 | client->afc_packet->operation = AFC_RENAME; | 616 | client->afc_packet->operation = AFC_OP_RENAME_PATH; |
| 616 | bytes = dispatch_AFC_packet(client, send, strlen(to)+1 + strlen(from)+1); | 617 | bytes = dispatch_AFC_packet(client, send, strlen(to)+1 + strlen(from)+1); |
| 617 | free(send); | 618 | free(send); |
| 618 | if (bytes <= 0) { | 619 | if (bytes <= 0) { |
| @@ -652,7 +653,7 @@ iphone_error_t afc_mkdir(afc_client_t client, const char *dir) | |||
| 652 | afc_lock(client); | 653 | afc_lock(client); |
| 653 | 654 | ||
| 654 | // Send command | 655 | // Send command |
| 655 | client->afc_packet->operation = AFC_MAKE_DIR; | 656 | client->afc_packet->operation = AFC_OP_MAKE_DIR; |
| 656 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; | 657 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; |
| 657 | bytes = dispatch_AFC_packet(client, dir, strlen(dir)+1); | 658 | bytes = dispatch_AFC_packet(client, dir, strlen(dir)+1); |
| 658 | if (bytes <= 0) { | 659 | if (bytes <= 0) { |
| @@ -695,7 +696,7 @@ iphone_error_t afc_get_file_info(afc_client_t client, const char *path, char *** | |||
| 695 | afc_lock(client); | 696 | afc_lock(client); |
| 696 | 697 | ||
| 697 | // Send command | 698 | // Send command |
| 698 | client->afc_packet->operation = AFC_GET_INFO; | 699 | client->afc_packet->operation = AFC_OP_GET_FILE_INFO; |
| 699 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 700 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 700 | dispatch_AFC_packet(client, path, strlen(path)+1); | 701 | dispatch_AFC_packet(client, path, strlen(path)+1); |
| 701 | 702 | ||
| @@ -747,7 +748,7 @@ afc_open_file(afc_client_t client, const char *filename, | |||
| 747 | memcpy(data + 4, &ag, 4); | 748 | memcpy(data + 4, &ag, 4); |
| 748 | memcpy(data + 8, filename, strlen(filename)); | 749 | memcpy(data + 8, filename, strlen(filename)); |
| 749 | data[8 + strlen(filename)] = '\0'; | 750 | data[8 + strlen(filename)] = '\0'; |
| 750 | client->afc_packet->operation = AFC_FILE_OPEN; | 751 | client->afc_packet->operation = AFC_OP_FILE_OPEN; |
| 751 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 752 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 752 | bytes = dispatch_AFC_packet(client, data, 8 + strlen(filename) + 1); | 753 | bytes = dispatch_AFC_packet(client, data, 8 + strlen(filename) + 1); |
| 753 | free(data); | 754 | free(data); |
| @@ -808,7 +809,7 @@ afc_read_file(afc_client_t client, uint64_t handle, char *data, int length, uint | |||
| 808 | AFCFilePacket *packet = (AFCFilePacket *) malloc(sizeof(AFCFilePacket)); | 809 | AFCFilePacket *packet = (AFCFilePacket *) malloc(sizeof(AFCFilePacket)); |
| 809 | packet->filehandle = handle; | 810 | packet->filehandle = handle; |
| 810 | packet->size = ((length - current_count) < MAXIMUM_READ_SIZE) ? (length - current_count) : MAXIMUM_READ_SIZE; | 811 | packet->size = ((length - current_count) < MAXIMUM_READ_SIZE) ? (length - current_count) : MAXIMUM_READ_SIZE; |
| 811 | client->afc_packet->operation = AFC_READ; | 812 | client->afc_packet->operation = AFC_OP_READ; |
| 812 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 813 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 813 | bytes_loc = dispatch_AFC_packet(client, (char *) packet, sizeof(AFCFilePacket)); | 814 | bytes_loc = dispatch_AFC_packet(client, (char *) packet, sizeof(AFCFilePacket)); |
| 814 | free(packet); | 815 | free(packet); |
| @@ -880,7 +881,7 @@ afc_write_file(afc_client_t client, uint64_t handle, | |||
| 880 | // Send the segment | 881 | // Send the segment |
| 881 | client->afc_packet->this_length = sizeof(AFCPacket) + 8; | 882 | client->afc_packet->this_length = sizeof(AFCPacket) + 8; |
| 882 | client->afc_packet->entire_length = client->afc_packet->this_length + MAXIMUM_WRITE_SIZE; | 883 | client->afc_packet->entire_length = client->afc_packet->this_length + MAXIMUM_WRITE_SIZE; |
| 883 | client->afc_packet->operation = AFC_WRITE; | 884 | client->afc_packet->operation = AFC_OP_WRITE; |
| 884 | out_buffer = (char *) malloc(sizeof(char) * client->afc_packet->entire_length - sizeof(AFCPacket)); | 885 | out_buffer = (char *) malloc(sizeof(char) * client->afc_packet->entire_length - sizeof(AFCPacket)); |
| 885 | memcpy(out_buffer, (char *)&handle, sizeof(uint64_t)); | 886 | memcpy(out_buffer, (char *)&handle, sizeof(uint64_t)); |
| 886 | memcpy(out_buffer + 8, data + current_count, MAXIMUM_WRITE_SIZE); | 887 | memcpy(out_buffer + 8, data + current_count, MAXIMUM_WRITE_SIZE); |
| @@ -914,7 +915,7 @@ afc_write_file(afc_client_t client, uint64_t handle, | |||
| 914 | 915 | ||
| 915 | client->afc_packet->this_length = sizeof(AFCPacket) + 8; | 916 | client->afc_packet->this_length = sizeof(AFCPacket) + 8; |
| 916 | client->afc_packet->entire_length = client->afc_packet->this_length + (length - current_count); | 917 | client->afc_packet->entire_length = client->afc_packet->this_length + (length - current_count); |
| 917 | client->afc_packet->operation = AFC_WRITE; | 918 | client->afc_packet->operation = AFC_OP_WRITE; |
| 918 | out_buffer = (char *) malloc(sizeof(char) * client->afc_packet->entire_length - sizeof(AFCPacket)); | 919 | out_buffer = (char *) malloc(sizeof(char) * client->afc_packet->entire_length - sizeof(AFCPacket)); |
| 919 | memcpy(out_buffer, (char *) &handle, sizeof(uint64_t)); | 920 | memcpy(out_buffer, (char *) &handle, sizeof(uint64_t)); |
| 920 | memcpy(out_buffer + 8, data + current_count, (length - current_count)); | 921 | memcpy(out_buffer + 8, data + current_count, (length - current_count)); |
| @@ -960,7 +961,7 @@ iphone_error_t afc_close_file(afc_client_t client, uint64_t handle) | |||
| 960 | 961 | ||
| 961 | // Send command | 962 | // Send command |
| 962 | memcpy(buffer, &handle, sizeof(uint64_t)); | 963 | memcpy(buffer, &handle, sizeof(uint64_t)); |
| 963 | client->afc_packet->operation = AFC_FILE_CLOSE; | 964 | client->afc_packet->operation = AFC_OP_FILE_CLOSE; |
| 964 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 965 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 965 | bytes = dispatch_AFC_packet(client, buffer, 8); | 966 | bytes = dispatch_AFC_packet(client, buffer, 8); |
| 966 | free(buffer); | 967 | free(buffer); |
| @@ -1007,7 +1008,7 @@ iphone_error_t afc_lock_file(afc_client_t client, uint64_t handle, afc_lock_op_t | |||
| 1007 | memcpy(buffer, &handle, sizeof(uint64_t)); | 1008 | memcpy(buffer, &handle, sizeof(uint64_t)); |
| 1008 | memcpy(buffer + 8, &op, 8); | 1009 | memcpy(buffer + 8, &op, 8); |
| 1009 | 1010 | ||
| 1010 | client->afc_packet->operation = AFC_FILE_LOCK; | 1011 | client->afc_packet->operation = AFC_OP_FILE_LOCK; |
| 1011 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 1012 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 1012 | bytes = dispatch_AFC_packet(client, buffer, 16); | 1013 | bytes = dispatch_AFC_packet(client, buffer, 16); |
| 1013 | free(buffer); | 1014 | free(buffer); |
| @@ -1053,7 +1054,7 @@ iphone_error_t afc_seek_file(afc_client_t client, uint64_t handle, int64_t offse | |||
| 1053 | memcpy(buffer + 8, &whence, sizeof(int32_t)); // fromwhere | 1054 | memcpy(buffer + 8, &whence, sizeof(int32_t)); // fromwhere |
| 1054 | memcpy(buffer + 12, &zero, sizeof(uint32_t)); // pad | 1055 | memcpy(buffer + 12, &zero, sizeof(uint32_t)); // pad |
| 1055 | memcpy(buffer + 16, &offset, sizeof(uint64_t)); // offset | 1056 | memcpy(buffer + 16, &offset, sizeof(uint64_t)); // offset |
| 1056 | client->afc_packet->operation = AFC_FILE_SEEK; | 1057 | client->afc_packet->operation = AFC_OP_FILE_SEEK; |
| 1057 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; | 1058 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; |
| 1058 | bytes = dispatch_AFC_packet(client, buffer, 24); | 1059 | bytes = dispatch_AFC_packet(client, buffer, 24); |
| 1059 | free(buffer); | 1060 | free(buffer); |
| @@ -1097,7 +1098,7 @@ iphone_error_t afc_truncate_file(afc_client_t client, uint64_t handle, uint64_t | |||
| 1097 | // Send command | 1098 | // Send command |
| 1098 | memcpy(buffer, &handle, sizeof(uint64_t)); // handle | 1099 | memcpy(buffer, &handle, sizeof(uint64_t)); // handle |
| 1099 | memcpy(buffer + 8, &newsize, sizeof(uint64_t)); // newsize | 1100 | memcpy(buffer + 8, &newsize, sizeof(uint64_t)); // newsize |
| 1100 | client->afc_packet->operation = AFC_FILE_TRUNCATE; | 1101 | client->afc_packet->operation = AFC_OP_FILE_SET_SIZE; |
| 1101 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; | 1102 | client->afc_packet->this_length = client->afc_packet->entire_length = 0; |
| 1102 | bytes = dispatch_AFC_packet(client, buffer, 16); | 1103 | bytes = dispatch_AFC_packet(client, buffer, 16); |
| 1103 | free(buffer); | 1104 | free(buffer); |
| @@ -1145,7 +1146,7 @@ iphone_error_t afc_truncate(afc_client_t client, const char *path, off_t newsize | |||
| 1145 | memcpy(send, &size_requested, 8); | 1146 | memcpy(send, &size_requested, 8); |
| 1146 | memcpy(send + 8, path, strlen(path) + 1); | 1147 | memcpy(send + 8, path, strlen(path) + 1); |
| 1147 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 1148 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 1148 | client->afc_packet->operation = AFC_TRUNCATE; | 1149 | client->afc_packet->operation = AFC_OP_TRUNCATE; |
| 1149 | bytes = dispatch_AFC_packet(client, send, 8 + strlen(path) + 1); | 1150 | bytes = dispatch_AFC_packet(client, send, 8 + strlen(path) + 1); |
| 1150 | free(send); | 1151 | free(send); |
| 1151 | if (bytes <= 0) { | 1152 | if (bytes <= 0) { |
| @@ -1196,7 +1197,7 @@ iphone_error_t afc_make_link(afc_client_t client, afc_link_type_t linktype, cons | |||
| 1196 | memcpy(send + 8, target, strlen(target) + 1); | 1197 | memcpy(send + 8, target, strlen(target) + 1); |
| 1197 | memcpy(send + 8 + strlen(target) + 1, linkname, strlen(linkname) + 1); | 1198 | memcpy(send + 8 + strlen(target) + 1, linkname, strlen(linkname) + 1); |
| 1198 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; | 1199 | client->afc_packet->entire_length = client->afc_packet->this_length = 0; |
| 1199 | client->afc_packet->operation = AFC_MAKE_LINK; | 1200 | client->afc_packet->operation = AFC_OP_MAKE_LINK; |
| 1200 | bytes = dispatch_AFC_packet(client, send, 8 + strlen(linkname) + 1 + strlen(target) + 1); | 1201 | bytes = dispatch_AFC_packet(client, send, 8 + strlen(linkname) + 1 + strlen(target) + 1); |
| 1201 | free(send); | 1202 | free(send); |
| 1202 | if (bytes <= 0) { | 1203 | if (bytes <= 0) { |
| @@ -52,35 +52,36 @@ struct afc_client_int { | |||
| 52 | GMutex *mutex; | 52 | GMutex *mutex; |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | /* AFC Operations */ | ||
| 55 | enum { | 56 | enum { |
| 56 | AFC_ERROR = 0x00000001, | 57 | AFC_OP_STATUS = 0x00000001, // Status |
| 57 | AFC_SUCCESS_RESPONSE = 0x00000002, | 58 | AFC_OP_DATA = 0x00000002, // Data |
| 58 | AFC_LIST_DIR = 0x00000003, // ReadDir | 59 | AFC_OP_READ_DIR = 0x00000003, // ReadDir |
| 59 | // 0x00000004 // ReadFile | 60 | AFC_OP_READ_FILE = 0x00000004, // ReadFile |
| 60 | // 0x00000005 // WriteFile | 61 | AFC_OP_WRITE_FILE = 0x00000005, // WriteFile |
| 61 | // 0x00000006 // WritePart | 62 | AFC_OP_WRITE_PART = 0x00000006, // WritePart |
| 62 | AFC_TRUNCATE = 0x00000007, // Truncate | 63 | AFC_OP_TRUNCATE = 0x00000007, // TruncateFile |
| 63 | AFC_DELETE = 0x00000008, // RemovePath | 64 | AFC_OP_REMOVE_PATH = 0x00000008, // RemovePath |
| 64 | AFC_MAKE_DIR = 0x00000009, // MakeDir | 65 | AFC_OP_MAKE_DIR = 0x00000009, // MakeDir |
| 65 | AFC_GET_INFO = 0x0000000a, // GetFileInfo | 66 | AFC_OP_GET_FILE_INFO = 0x0000000a, // GetFileInfo |
| 66 | AFC_GET_DEVINFO = 0x0000000b, // GetDeviceInfo | 67 | AFC_OP_GET_DEVINFO = 0x0000000b, // GetDeviceInfo |
| 67 | // 0x0000000c // same as 5, but writes to temp file, then renames it. | 68 | AFC_OP_WRITE_FILE_ATOM = 0x0000000c, // WriteFileAtomic (tmp file+rename) |
| 68 | AFC_FILE_OPEN = 0x0000000d, // FileRefOpen | 69 | AFC_OP_FILE_OPEN = 0x0000000d, // FileRefOpen |
| 69 | AFC_FILE_HANDLE = 0x0000000e, // _unknownPacket | 70 | AFC_OP_FILE_OPEN_RES = 0x0000000e, // FileRefOpenResult |
| 70 | AFC_READ = 0x0000000f, // FileRefRead | 71 | AFC_OP_READ = 0x0000000f, // FileRefRead |
| 71 | AFC_WRITE = 0x00000010, // FileRefWrite | 72 | AFC_OP_WRITE = 0x00000010, // FileRefWrite |
| 72 | AFC_FILE_SEEK = 0x00000011, // FileRefSeek | 73 | AFC_OP_FILE_SEEK = 0x00000011, // FileRefSeek |
| 73 | AFC_FILE_TELL = 0x00000012, // FileRefTell | 74 | AFC_OP_FILE_TELL = 0x00000012, // FileRefTell |
| 74 | // 0x00000013 // _unknownPacket | 75 | AFC_OP_FILE_TELL_RES = 0x00000013, // FileRefTellResult |
| 75 | AFC_FILE_CLOSE = 0x00000014, // FileRefClose | 76 | AFC_OP_FILE_CLOSE = 0x00000014, // FileRefClose |
| 76 | AFC_FILE_TRUNCATE = 0x00000015, // FileRefSetFileSize (ftruncate) | 77 | AFC_OP_FILE_SET_SIZE = 0x00000015, // FileRefSetFileSize (ftruncate) |
| 77 | // 0x00000016 // SetFatalError | 78 | AFC_OP_GET_CON_INFO = 0x00000016, // GetConnectionInfo |
| 78 | // 0x00000017 // SetConnectionOptions | 79 | AFC_OP_SET_CON_OPTIONS = 0x00000017, // SetConnectionOptions |
| 79 | AFC_RENAME = 0x00000018, // RenamePath | 80 | AFC_OP_RENAME_PATH = 0x00000018, // RenamePath |
| 80 | // 0x00000019 // SetFSBlockSize (0x800000) | 81 | AFC_OP_SET_FS_BS = 0x00000019, // SetFSBlockSize (0x800000) |
| 81 | // 0x0000001A // SetBlockSize (0x800000) | 82 | AFC_OP_SET_SOCKET_BS = 0x0000001A, // SetSocketBlockSize (0x800000) |
| 82 | AFC_FILE_LOCK = 0x0000001B, // FileRefLock | 83 | AFC_OP_FILE_LOCK = 0x0000001B, // FileRefLock |
| 83 | AFC_MAKE_LINK = 0x0000001C // MakeLink | 84 | AFC_OP_MAKE_LINK = 0x0000001C // MakeLink |
| 84 | }; | 85 | }; |
| 85 | 86 | ||
| 86 | static int afcerror_to_errno(int afcerror); | 87 | static int afcerror_to_errno(int afcerror); |
