int getFileSize(const std::wstring& filepath) { std::string mbcs_filepath = toMBCS(filepath); struct stat file_stat; stat(mbcs_filepath.c_str(),&file_stat); return (int)file_stat.st_size; //不支持大文件 }
bool ClassSpaceChecker::collectJavaClassInfo(const QString & classFile, ClassFileContext *ctx) { JavaClass *clazz = jclass_class_new(toMBCS(classFile).c_str(), NULL); if(clazz == NULL) return false; // method count ctx->methodCount = clazz->methods_count; ConstantPool *constant_pool = clazz->constant_pool; if(constant_pool == NULL) return false; char* class_name; char* method_name; char* package_name; char* this_class = jclass_cp_get_this_class_name(constant_pool); char* this_package = jclass_get_package_from_class_name(this_class); for(int count = 1; count < constant_pool->count; count++) { switch(constant_pool->entries[count].tag) { case CONSTANT_Class: class_name = jclass_cp_get_class_name(constant_pool, count, 1); package_name = jclass_get_package_from_class_name(class_name); if(!jclass_string_is_primitive_type(class_name)) { if(strcmp(class_name, this_class) != 0) { //if(strchr(class_name,'$') == NULL) { ctx->classReferencedList.insert(class_name); } } } free(class_name); if(package_name != NULL) { //if(do_flag & PACKAGES) // string_list_add(package_list, package_name, IS_DEPENDENCY); free(package_name); } break; case CONSTANT_Methodref: case CONSTANT_InterfaceMethodref: //if(do_flag & METHOD_REF) //{ // method_name = jclass_cp_get_method_signature(constant_pool, count, 1); // if(method_name != NULL) // { // class_name = jclass_get_class_from_method_signature(method_name); // method_flag = (strcmp(class_name, this_class)? IS_DEPENDENCY: flag); // // if (constant_pool->entries[count].tag == CONSTANT_Methodref) // string_list_add(method_list, method_name, method_flag); // else // string_list_add(interface_method_list, method_name, method_flag); // free(class_name); // free(method_name); // } //} break; } } free(this_class); free(this_package); jclass_class_free(clazz); return true; }