int get_rock_ridge_filename(struct iso_directory_record * de, char * retname, struct inode * inode) 
int get_rock_ridge_filename(struct iso_directory_record *de, char *retname, struct inode *inode) 
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;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/1d372116383f79e42a3eb010c7d6ec3dd28767b3/rock.c/clean/fs/isofs/rock.c