Пример #1
0
int
utimensat3d(int dir, const char* path, const struct timespec* tms, int flags)
{
	register char*	sp;
	register int	r;
	time_t		atime;
	time_t		mtime;
#if FS
	Mount_t*	mp;
#endif

	if (state.in_2d)
		return(UTIMETS(path, tms));
	if (tms)
	{
		atime = atimeof(tms);
		mtime = mtimeof(tms);
	}
	else atime = mtime = time((time_t*)0);
#if FS
	if (!fscall(NiL, MSG_utime, 0, path, atime, mtime))
		return(state.ret);
	mp = monitored();
#endif
	if (dir != AT_FDCWD && *path != '/')
		sp = (char*)path;
	else if (!(sp = pathreal(path, P_TOP, NiL)))
		return(-1);
	r = UTIMENSAT(dir, sp, tms, flags);
#if FS
	if (!r)
	{
		if (mp)
			fscall(mp, MSG_utime, 0, path, atime, mtime);
		for (mp = state.global; mp; mp = mp->global)
			if (fssys(mp, MSG_utime))
				fscall(mp, MSG_utime, 0, path, atime, mtime);
	}
#endif
	return(r);
}
Пример #2
0
ulong
timeof(char *name, int force)
{
	Symtab *sym;
	ulong t;

	if(utfrune(name, '('))
		return atimeof(force, name);		/* archive */

	if(force)
		return mtime(name);

	sym = symlook(name, S_TIME, 0);
	if (sym)
		return sym->u.value;		/* uggh */

	t = mkmtime(name, 0);
	if(t == 0)
		return 0;

	symlook(name, S_TIME, (void*)t);		/* install time in cache */
	return t;
}