xref: /minix3/minix/lib/libpuffs/utility.c (revision ba736c796854b82e29da17267614db0a449419db)
1*ba736c79SDavid van Moolenbroek /* Created (MFS based):
2*ba736c79SDavid van Moolenbroek  *   February 2010 (Evgeniy Ivanov)
3*ba736c79SDavid van Moolenbroek  */
4*ba736c79SDavid van Moolenbroek 
5*ba736c79SDavid van Moolenbroek #include "fs.h"
6*ba736c79SDavid van Moolenbroek 
7*ba736c79SDavid van Moolenbroek #include <stdarg.h>
8*ba736c79SDavid van Moolenbroek 
9*ba736c79SDavid van Moolenbroek /*
10*ba736c79SDavid van Moolenbroek  * Match by inode number in a puffs_pn_nodewalk call.  This should not exist.
11*ba736c79SDavid van Moolenbroek  */
12*ba736c79SDavid van Moolenbroek void *
find_inode_cb(struct puffs_usermount * __unused pu,struct puffs_node * pn,void * arg)13*ba736c79SDavid van Moolenbroek find_inode_cb(struct puffs_usermount * __unused pu, struct puffs_node * pn,
14*ba736c79SDavid van Moolenbroek 	void * arg)
15*ba736c79SDavid van Moolenbroek {
16*ba736c79SDavid van Moolenbroek 
17*ba736c79SDavid van Moolenbroek 	if (pn->pn_va.va_fileid == *(ino_t *)arg)
18*ba736c79SDavid van Moolenbroek 		return pn;
19*ba736c79SDavid van Moolenbroek 	else
20*ba736c79SDavid van Moolenbroek 		return NULL;
21*ba736c79SDavid van Moolenbroek }
22*ba736c79SDavid van Moolenbroek 
23*ba736c79SDavid van Moolenbroek /*===========================================================================*
24*ba736c79SDavid van Moolenbroek  *				update_timens				     *
25*ba736c79SDavid van Moolenbroek  *===========================================================================*/
update_timens(struct puffs_node * pn,int flags,struct timespec * t)26*ba736c79SDavid van Moolenbroek int update_timens(struct puffs_node *pn, int flags, struct timespec *t)
27*ba736c79SDavid van Moolenbroek {
28*ba736c79SDavid van Moolenbroek   int r;
29*ba736c79SDavid van Moolenbroek   struct vattr va;
30*ba736c79SDavid van Moolenbroek   struct timespec new_time;
31*ba736c79SDavid van Moolenbroek   PUFFS_MAKECRED(pcr, &global_kcred);
32*ba736c79SDavid van Moolenbroek 
33*ba736c79SDavid van Moolenbroek   if (!flags)
34*ba736c79SDavid van Moolenbroek 	return 0;
35*ba736c79SDavid van Moolenbroek 
36*ba736c79SDavid van Moolenbroek   if (global_pu->pu_ops.puffs_node_setattr == NULL)
37*ba736c79SDavid van Moolenbroek 	return EINVAL;
38*ba736c79SDavid van Moolenbroek 
39*ba736c79SDavid van Moolenbroek   if (t != NULL)
40*ba736c79SDavid van Moolenbroek 	new_time = *t;
41*ba736c79SDavid van Moolenbroek   else
42*ba736c79SDavid van Moolenbroek 	(void)clock_time(&new_time);
43*ba736c79SDavid van Moolenbroek 
44*ba736c79SDavid van Moolenbroek   puffs_vattr_null(&va);
45*ba736c79SDavid van Moolenbroek   /* librefuse modifies atime and mtime together,
46*ba736c79SDavid van Moolenbroek    * so set old values to avoid setting either one
47*ba736c79SDavid van Moolenbroek    * to PUFFS_VNOVAL (set by puffs_vattr_null).
48*ba736c79SDavid van Moolenbroek    */
49*ba736c79SDavid van Moolenbroek   va.va_atime = pn->pn_va.va_atime;
50*ba736c79SDavid van Moolenbroek   va.va_mtime = pn->pn_va.va_mtime;
51*ba736c79SDavid van Moolenbroek 
52*ba736c79SDavid van Moolenbroek   if (flags & ATIME)
53*ba736c79SDavid van Moolenbroek 	va.va_atime = new_time;
54*ba736c79SDavid van Moolenbroek   if (flags & MTIME)
55*ba736c79SDavid van Moolenbroek 	va.va_mtime = new_time;
56*ba736c79SDavid van Moolenbroek   if (flags & CTIME)
57*ba736c79SDavid van Moolenbroek 	va.va_ctime = new_time;
58*ba736c79SDavid van Moolenbroek 
59*ba736c79SDavid van Moolenbroek   r = global_pu->pu_ops.puffs_node_setattr(global_pu, pn, &va, pcr);
60*ba736c79SDavid van Moolenbroek 
61*ba736c79SDavid van Moolenbroek   return(r);
62*ba736c79SDavid van Moolenbroek }
63*ba736c79SDavid van Moolenbroek 
64*ba736c79SDavid van Moolenbroek 
65*ba736c79SDavid van Moolenbroek /*===========================================================================*
66*ba736c79SDavid van Moolenbroek  *				lpuffs_debug				     *
67*ba736c79SDavid van Moolenbroek  *===========================================================================*/
lpuffs_debug(const char * format,...)68*ba736c79SDavid van Moolenbroek void lpuffs_debug(const char *format, ...)
69*ba736c79SDavid van Moolenbroek {
70*ba736c79SDavid van Moolenbroek   char buffer[256];
71*ba736c79SDavid van Moolenbroek   va_list args;
72*ba736c79SDavid van Moolenbroek   va_start (args, format);
73*ba736c79SDavid van Moolenbroek   vsprintf (buffer,format, args);
74*ba736c79SDavid van Moolenbroek   printf("%s: %s", fs_name, buffer);
75*ba736c79SDavid van Moolenbroek   va_end (args);
76*ba736c79SDavid van Moolenbroek }
77