1 /* Part of libhgfs - (c) 2009, D.C. van Moolenbroek */
7 /*===========================================================================*
9 *===========================================================================*/
13 /* Append the given path name in HGFS format to the RPC buffer. Truncate it
14 * if it is longer than PATH_MAX bytes.
16 char *p
, buf
[PATH_MAX
];
19 /* No leading slashes are allowed. */
20 for (p
= path
; *p
== '/'; p
++);
22 /* No double or tailing slashes, either. */
23 for (len
= 0; *p
&& len
< sizeof(buf
) - 1; len
++) {
25 for (p
++; *p
== '/'; p
++);
36 memcpy(RPC_PTR
, buf
, len
);
42 /*===========================================================================*
44 *===========================================================================*/
45 int path_get(path
, max
)
49 /* Retrieve a HGFS formatted path name from the RPC buffer. Returns EINVAL if
50 * the path name is invalid. Returns ENAMETOOLONG if the path name is too
51 * long. Returns OK on success.
58 if (len
>= max
) return ENAMETOOLONG
;
60 for (p
= path
, q
= RPC_PTR
; n
--; p
++, q
++) {
61 /* We can not deal with a slash in a path component. */
62 if (*q
== '/') return EINVAL
;
64 if (*q
== 0) *p
= '/';
72 return (RPC_NEXT8
!= 0) ? EINVAL
: OK
;