Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
0
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;
}