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 = ¶ml1;
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 )