MAYBE_CONTINUE(repeat, inode); kfree(buffer); return retnamlen;	/* If 0, this file did not have a NM field */ 
ret = rock_continue(&rs); if (ret == 0) goto repeat; if (ret == 1) return retnamlen; /* If 0, this file did not have a NM field */ 
int get_rock_ridge_filename(struct iso_directory_record *de,			    char *retname, struct inode *inode){	int len;	unsigned char *chr;	int cont_extent = 0;	int cont_offset = 0;	int cont_size = 0;	void *buffer = NULL;	struct rock_ridge *rr;	int sig;	int retnamlen = 0;	int truncate = 0;	if (!ISOFS_SB(inode->i_sb)->s_rock)		return 0;	*retname = 0;	setup_rock_ridge(de, inode, &chr, &len);repeat:	while (len > 2) { /* There may be one byte for padding somewhere */		rr = (struct rock_ridge *)chr;		if (rr->len < 3)			goto out;	/* Something got screwed up here */		sig = isonum_721(chr);		chr += rr->len;		len -= rr->len;		if (len < 0)			goto out;	/* corrupted isofs */		switch (sig) {		case SIG('R', 'R'):			if ((rr->u.RR.flags[0] & RR_NM) == 0)				goto out;			break;		case SIG('S', 'P'):			if (check_sp(rr, inode))				goto out;			break;		case SIG('C', 'E'):			cont_extent = isonum_733(rr->u.CE.extent);			cont_offset = isonum_733(rr->u.CE.offset);			cont_size = isonum_733(rr->u.CE.size);			break;		case SIG('N', 'M'):			if (truncate)				break;			if (rr->len < 5)				break;			/*			 * If the flags are 2 or 4, this indicates '.' or '..'.			 * We don't want to do anything with this, because it			 * screws up the code that calls us.  We don't really			 * care anyways, since we can just use the non-RR			 * name.			 */			if (rr->u.NM.flags & 6)				break;			if (rr->u.NM.flags & ~1) {				printk("Unsupported NM flag settings (%d)\n",					rr->u.NM.flags);				break;			}			if ((strlen(retname) + rr->len - 5) >= 254) {				truncate = 1;				break;			}			strncat(retname, rr->u.NM.name, rr->len - 5);			retnamlen += rr->len - 5;			break;		case SIG('R', 'E'):			if (buffer)				kfree(buffer);			return -1;		default:			break;		}	}	MAYBE_CONTINUE(repeat, inode);	kfree(buffer);	return retnamlen;	/* If 0, this file did not have a NM field */out:	if (buffer)		kfree(buffer);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/ba40aaf04314ec5efd090e69518033fc55f450fa/rock.c/clean/fs/isofs/rock.c