int appledouble_readdir(struct afp_volume * volume, const char *path, struct afp_file_info **base) { unsigned int resource; char * newpath; resource = extra_translate(volume, path, &newpath); switch(resource) { case 0: return 0; case AFP_META_APPLEDOUBLE: { struct afp_file_info *fp, *prev=NULL, *newfp=NULL, *newchain=NULL, *last=NULL; ll_readdir(volume, newpath,base,1); /* Add .finderinfo files */ for (fp=*base;fp;fp=fp->next) { add_fp(&newchain,fp,finderinfo_string,32); /* Add comments if it has a size > 0 */ if (ensure_dt_opened(volume)==0) { int size=get_comment_size(volume, fp->basic.name,fp->did); if (size>0) add_fp(&newchain,fp,comment_string,32); } if (fp->basic.unixprivs.permissions & S_IFREG) { if (fp->resourcesize==0) { remove_fp(base,fp); } } else { remove_fp(base,fp); } last=fp; } if ((newchain) && (last)) { last->next=newchain; } free(newpath); return 1; case AFP_META_RESOURCE: case AFP_META_SERVER_ICON: case AFP_META_COMMENT: free(newpath); return -ENOTDIR; } } return 0; }
extern "C" ENCODER_DECLARE_EXPORT char * encoder_fp_mem(Mnemonic m, OpndSize size, int reg, int disp, int base_reg, bool isBasePhysical, char * stream) { EncoderBase::Operands args; add_m(args, base_reg, disp, size); // a fake FP register as operand add_fp(args, reg, size == OpndSize_64/*is_double*/); char* stream_start = stream; stream = (char *)EncoderBase::encode(stream, m, args); #ifdef PRINT_ENCODER_STREAM printEncoderInst(m, args); decodeThenPrint(stream_start); #endif return stream; }
extern "C" ENCODER_DECLARE_EXPORT char * encoder_compare_fp_stack(bool pop, int reg, bool isDouble, char * stream) { //Mnemonic m = pop ? Mnemonic_FUCOMP : Mnemonic_FUCOM; Mnemonic m = pop ? Mnemonic_FUCOMIP : Mnemonic_FUCOMI; //a single operand or 2 operands? //FST ST(i) has a single operand in encoder.inl? EncoderBase::Operands args; add_fp(args, reg, isDouble); char* stream_start = stream; stream = (char *)EncoderBase::encode(stream, m, args); #ifdef PRINT_ENCODER_STREAM printEncoderInst(m, args); decodeThenPrint(stream_start); #endif return stream; }