Quizzer

 view release on metacpan or  search on metacpan

exercises/compile-tcsh/tcsh-6.10.00/sh.exp.c  view on Meta::CPAN

		break;
		
	    case 'F':
		strdev = putn( (int) st->st_dev);
		strino = putn( (int) st->st_ino);
		strF = (Char *) xmalloc((size_t) (2 + Strlen(strdev) + 
					 Strlen(strino)) * sizeof(Char));
		(void) Strcat(Strcat(Strcpy(strF, strdev), STRcolon), strino);
		xfree((ptr_t) strdev);
		xfree((ptr_t) strino);
		xfree((ptr_t) ep);
		return(strF);
		
	    case 'L':
		if ( *(ft + 1) ) {
		    i = 1;
		    break;
		}
#ifdef S_ISLNK
		filnam = short2str(ep);
#ifdef PATH_MAX
# define MY_PATH_MAX PATH_MAX
#else /* !PATH_MAX */
/* 
 * I can't think of any more sensible alterative; readlink doesn't give 
 * us an errno if the buffer isn't large enough :-(
 */
# define MY_PATH_MAX  2048
#endif /* PATH_MAX */
		i = readlink(filnam, string = (char *) 
		      xmalloc((size_t) (1 + MY_PATH_MAX) * sizeof(char)),
			MY_PATH_MAX);
		if (i >= 0 && i <= MY_PATH_MAX)
		    string[i] = '\0'; /* readlink does not null terminate */
		strF = (i < 0) ? errval : str2short(string);
		xfree((ptr_t) string);
		xfree((ptr_t) ep);
		return(Strsave(strF));

#else /* !S_ISLNK */
		i = 0;
		break;
#endif /* S_ISLNK */
		

	    case 'N':
		i = (int) st->st_nlink;
		break;

	    case 'P':
		string = string0 + 1;
		(void) xsnprintf(string, sizeof(string0) - 1, "%o",
		    pmask & (unsigned int) 
		    ((S_IRWXU|S_IRWXG|S_IRWXO|S_ISUID|S_ISGID) & st->st_mode));
		if (altout && *string != '0')
		    *--string = '0';
		xfree((ptr_t) ep);
		return(Strsave(str2short(string)));

	    case 'U':
		if (altout && (pw = getpwuid(st->st_uid))) {
		    xfree((ptr_t) ep);
		    return(Strsave(str2short(pw->pw_name)));
		}
		i = (int) st->st_uid;
		break;

	    case 'G':
		if ( altout && (gr = getgrgid(st->st_gid))) {
		    xfree((ptr_t) ep);
		    return(Strsave(str2short(gr->gr_name)));
		}
		i = (int) st->st_gid;
		break;

	    case 'Z':
		i = (int) st->st_size;
		break;

	    case 'A': case 'M': case 'C':
		footime = *ft == 'A' ? st->st_atime :
		    *ft == 'M' ? st->st_mtime : st->st_ctime;
		if (altout) {
		    strF = str2short(ctime(&footime));
		    if ((str = Strchr(strF, '\n')) != NULL)
			*str = (Char) '\0';
		    xfree((ptr_t) ep);
		    return(Strsave(strF));
		}
		i = (int) footime;
		break;

	    }
	}
    while (*++ft && i);
#ifdef EDEBUG
    etraci("exp6 -? i", i, vp);
#endif /* EDEBUG */
    xfree((ptr_t) ep);
    return (putn(i));
}


static void
evalav(v)
    register Char **v;
{
    struct wordent paraml1;
    register struct wordent *hp = &paraml1;
    struct command *t;
    register struct wordent *wdp = hp;

    set(STRstatus, Strsave(STR0), VAR_READWRITE);
    hp->prev = hp->next = hp;
    hp->word = STRNULL;
    while (*v) {
	register struct wordent *new =
	(struct wordent *) xcalloc(1, sizeof *wdp);

	new->prev = wdp;
	new->next = hp;



( run in 1.205 second using v1.01-cache-2.11-cpan-b16cb0d3907 )