repeat: { struct rock_ridge *rr; int sig; 
repeat: 
int get_rock_ridge_filename(struct iso_directory_record *de,			    char *retname, struct inode *inode){	int len;	unsigned char *chr;	CONTINUE_DECLS;	int retnamlen = 0, truncate = 0;	if (!ISOFS_SB(inode->i_sb)->s_rock)		return 0;	*retname = 0;	SETUP_ROCK_RIDGE(de, chr, len);      repeat:	{		struct rock_ridge *rr;		int sig;		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'):				CHECK_SP(goto out);				break;			case SIG('C', 'E'):				CHECK_CE;				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);	if (buffer)		kfree(buffer);	return retnamlen;	/* If 0, this file did not have a NM field */      out:	if (buffer)		kfree(buffer);	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7fa393a1d3d9485e428a3c74b5599190c14b13db/rock.c/clean/fs/isofs/rock.c