const char *imgtool_error(imgtoolerr_t err) { err = ERRORCODE(err) - 1; assert(err >= 0); assert(err < (sizeof(msgs) / sizeof(msgs[0]))); return msgs[err]; }
static s32 TranslateErrorCode(s32 native_error, bool isRW) { switch (native_error) { case ERRORCODE(EMSGSIZE): ERROR_LOG(WII_IPC_NET, "Find out why this happened, looks like PEEK failure?"); return -1; // Should be -SO_EMSGSIZE case EITHER(WSAENOTSOCK, EBADF): return -SO_EBADF; case ERRORCODE(EADDRINUSE): return -SO_EADDRINUSE; case ERRORCODE(ECONNRESET): return -SO_ECONNRESET; case ERRORCODE(EISCONN): return -SO_EISCONN; case ERRORCODE(ENOTCONN): return -SO_EAGAIN; // After proper blocking SO_EAGAIN shouldn't be needed... case ERRORCODE(EINPROGRESS): return -SO_EINPROGRESS; case ERRORCODE(EALREADY): return -SO_EALREADY; case ERRORCODE(EACCES): return -SO_EACCES; case ERRORCODE(ECONNREFUSED): return -SO_ECONNREFUSED; case ERRORCODE(ENETUNREACH): return -SO_ENETUNREACH; case ERRORCODE(EHOSTUNREACH): return -SO_EHOSTUNREACH; case EITHER(WSAEWOULDBLOCK, EAGAIN): if (isRW) { return -SO_EAGAIN; // EAGAIN } else { return -SO_EINPROGRESS; // EINPROGRESS } default: return -1; } }
#endif #define SLASHSLASH 0x2F2F // looks like "//" in ASCII. #define SERVER_LOCAL_CLIENT 0 extern INDEX net_iPort; extern CTString net_strLocalHost; extern INDEX net_bLookupHostNames; extern INDEX net_bReportICMPErrors; extern FLOAT net_fDropPackets; extern FLOAT net_tmConnectionTimeout; extern INDEX net_bReportPackets; static struct ErrorCode ErrorCodes[] = { #ifdef PLATFORM_WIN32 ERRORCODE(WSAEINTR , "WSAEINTR"), ERRORCODE(WSAEBADF , "WSAEBADF"), ERRORCODE(WSAEACCES , "WSAEACCES"), ERRORCODE(WSAEFAULT , "WSAEFAULT"), ERRORCODE(WSAEINVAL , "WSAEINVAL"), ERRORCODE(WSAEMFILE , "WSAEMFILE"), ERRORCODE(WSAEWOULDBLOCK , "WSAEWOULDBLOCK"), ERRORCODE(WSAEINPROGRESS , "WSAEINPROGRESS"), ERRORCODE(WSAEALREADY , "WSAEALREADY"), ERRORCODE(WSAENOTSOCK , "WSAENOTSOCK"), ERRORCODE(WSAEDESTADDRREQ , "WSAEDESTADDRREQ"), ERRORCODE(WSAEMSGSIZE , "WSAEMSGSIZE"), ERRORCODE(WSAEPROTOTYPE , "WSAEPROTOTYPE"), ERRORCODE(WSAENOPROTOOPT , "WSAENOPROTOOPT"), ERRORCODE(WSAEPROTONOSUPPORT, "WSAEPROTONOSUPPORT"), ERRORCODE(WSAESOCKTNOSUPPORT, "WSAESOCKTNOSUPPORT"),
static imgtoolerr_t macbinary_readfile(imgtool_partition *partition, const char *filename, const char *fork, imgtool_stream *destf) { static const UINT32 attrs[] = { IMGTOOLATTR_TIME_CREATED, IMGTOOLATTR_TIME_LASTMODIFIED, IMGTOOLATTR_INT_MAC_TYPE, IMGTOOLATTR_INT_MAC_CREATOR, IMGTOOLATTR_INT_MAC_FINDERFLAGS, IMGTOOLATTR_INT_MAC_COORDX, IMGTOOLATTR_INT_MAC_COORDY, IMGTOOLATTR_INT_MAC_FINDERFOLDER, IMGTOOLATTR_INT_MAC_SCRIPTCODE, IMGTOOLATTR_INT_MAC_EXTENDEDFLAGS, 0 }; imgtoolerr_t err; UINT8 header[128]; const char *basename; int i; UINT32 type_code = 0x3F3F3F3F; UINT32 creator_code = 0x3F3F3F3F; UINT16 finder_flags = 0; UINT16 coord_x = 0; UINT16 coord_y = 0; UINT16 finder_folder = 0; UINT8 script_code = 0; UINT8 extended_flags = 0; imgtool_forkent fork_entries[4]; const imgtool_forkent *data_fork = NULL; const imgtool_forkent *resource_fork = NULL; UINT32 creation_time = 0; UINT32 lastmodified_time = 0; imgtool_attribute attr_values[10]; /* get the forks */ err = imgtool_partition_list_file_forks(partition, filename, fork_entries, sizeof(fork_entries)); if (err) return err; for (i = 0; fork_entries[i].type != FORK_END; i++) { if (fork_entries[i].type == FORK_DATA) data_fork = &fork_entries[i]; else if (fork_entries[i].type == FORK_RESOURCE) resource_fork = &fork_entries[i]; } /* get the attributes */ err = imgtool_partition_get_file_attributes(partition, filename, attrs, attr_values); if (err && (ERRORCODE(err) != IMGTOOLERR_UNIMPLEMENTED)) return err; if (err == IMGTOOLERR_SUCCESS) { creation_time = mac_setup_time(attr_values[0].t); lastmodified_time = mac_setup_time(attr_values[1].t); type_code = attr_values[2].i; creator_code = attr_values[3].i; finder_flags = attr_values[4].i; coord_x = attr_values[5].i; coord_y = attr_values[6].i; finder_folder = attr_values[7].i; script_code = attr_values[8].i; extended_flags = attr_values[9].i; } memset(header, 0, sizeof(header)); /* place filename */ basename = filename; while(basename[strlen(basename) + 1]) basename += strlen(basename) + 1; pascal_from_c_string((unsigned char *) &header[1], 64, basename); place_integer_be(header, 65, 4, type_code); place_integer_be(header, 69, 4, creator_code); place_integer_be(header, 73, 1, (finder_flags >> 8) & 0xFF); place_integer_be(header, 75, 2, coord_x); place_integer_be(header, 77, 2, coord_y); place_integer_be(header, 79, 2, finder_folder); place_integer_be(header, 83, 4, data_fork ? data_fork->size : 0); place_integer_be(header, 87, 4, resource_fork ? resource_fork->size : 0); place_integer_be(header, 91, 4, creation_time); place_integer_be(header, 95, 4, lastmodified_time); place_integer_be(header, 101, 1, (finder_flags >> 0) & 0xFF); place_integer_be(header, 102, 4, 0x6D42494E); place_integer_be(header, 106, 1, script_code); place_integer_be(header, 107, 1, extended_flags); place_integer_be(header, 122, 1, 0x82); place_integer_be(header, 123, 1, 0x81); place_integer_be(header, 124, 2, ccitt_crc16(0, header, 124)); stream_write(destf, header, sizeof(header)); if (data_fork) { err = imgtool_partition_read_file(partition, filename, "", destf, NULL); if (err) return err; stream_fill(destf, 0, pad128(data_fork->size)); } if (resource_fork) { err = imgtool_partition_read_file(partition, filename, "RESOURCE_FORK", destf, NULL); if (err) return err; stream_fill(destf, 0, pad128(resource_fork->size)); } return IMGTOOLERR_SUCCESS; }