struct cmd_pkg_t* pkg_parse(char* pkg) { struct cmd_pkg_t* cmd_pkg; cmd_pkg = (struct cmd_pkg_t*)malloc(sizeof(struct cmd_pkg_t)); if (!cmd_pkg) { printf("[%s]malloc fail.\n", __func__); return NULL; } if (CMD_PKG_TYPE == get_package_type(pkg)) { printf("[%s]parse cmd pkg.\n", __func__); cmd_pkg->cmd_type = pkg[CMD_PKG_CMD_TYPE_OFFSET]; cmd_pkg->cmd = (pkg[CMD_PKG_CMD_H_OFFSET] << 8) | (pkg[CMD_PKG_CMD_L_OFFSET]); printf("[%s]cmd type:%d cmd:%d\n", __func__, cmd_pkg->cmd_type, cmd_pkg->cmd); if (get_uint_bit(pkg[CMD_PKG_CMD_DATA_EXIST_OFFSET], CMD_PKG_CMD_DATA_EXIST_BIT)) { cmd_pkg->data_len = (pkg[CMD_PKG_CMD_DATA_LEN_H_OFFSET] << 8) | (pkg[CMD_PKG_CMD_DATA_LEN_L_OFFSET]); printf("[%s]data len:%d\n", __func__, cmd_pkg->data_len); cmd_pkg->data = (char*)malloc(cmd_pkg->data_len); if (cmd_pkg->data == NULL) { free(cmd_pkg); return NULL; } memcpy(cmd_pkg->data, &pkg[CMD_PKG_CMD_DATA_OFFSET], cmd_pkg->data_len); } else { cmd_pkg->data_len = 0; cmd_pkg->data = NULL; } } else { printf("[%s]parse data pkg.\n", __func__); } return cmd_pkg; }
int main() { int ret; ret = get_package_type("pack.tar.gz"); printf("%d\n", ret); }