1 /* Part of libhgfs - (c) 2009, D.C. van Moolenbroek */
7 /*===========================================================================*
9 *===========================================================================*/
10 void path_put(char *path
)
12 /* Append the given path name in HGFS format to the RPC buffer. Truncate it
13 * if it is longer than PATH_MAX bytes.
15 char *p
, buf
[PATH_MAX
];
18 /* No leading slashes are allowed. */
19 for (p
= path
; *p
== '/'; p
++);
21 /* No double or tailing slashes, either. */
22 for (len
= 0; *p
&& len
< sizeof(buf
) - 1; len
++) {
24 for (p
++; *p
== '/'; p
++);
35 memcpy(RPC_PTR
, buf
, len
);
41 /*===========================================================================*
43 *===========================================================================*/
44 int path_get(char *path
, int max
)
46 /* Retrieve a HGFS formatted path name from the RPC buffer. Returns EINVAL if
47 * the path name is invalid. Returns ENAMETOOLONG if the path name is too
48 * long. Returns OK on success.
55 if (len
>= max
) return ENAMETOOLONG
;
57 for (p
= path
, q
= RPC_PTR
; n
--; p
++, q
++) {
58 /* We can not deal with a slash in a path component. */
59 if (*q
== '/') return EINVAL
;
61 if (*q
== 0) *p
= '/';
69 return (RPC_NEXT8
!= 0) ? EINVAL
: OK
;