I am writing client and server programs for a simple FTP.

I am allowed to use chdir, getcwd and getenv.

What would be a correct procedure to expand a user provided path correctly using these functions, assuming of course the user supplied path is stored in a c-string?

Thank you.

User supplied file names must be either absolute or relative to the application. If the file starts with '/' then it must be absolute. Otherwise, it is relative. Just tack it on to the end of the current working directory name, then collapse instances of "./" and "../".

You didn't say whether you are working on Unix or Windows, so you should be able to handle paths that start with a drive letter ("D:/foo/bar" is absolute, but "D:foo/bar" is relative) and that use '\\' and/or '/' as separators.

Personally, I would be inclined to split the path into a deque, manipulate its parts, then join it back together when done.

Hope this helps.

Thanks again, Duoas. Both the server and the client will be on a Solaris (Unix) machine.

The object of this socket/network programming class is to keep things as barebone/simple as possible, so I don't think a deque is an option. Shouldn't the unix chdir function be able to handle both a relative and an absolute path?

Sorry, I had just answered some questions in the C++ forum and forgot that this was the C forum, so a deque is unavailable in C...

Yes, the chdir() function can take both relative and absolute paths.

For parsing the paths I recommend you to the strpbrk() or strchr() functions (both defined in <string.h>).

Good luck.

This article has been dead for over six months. Start a new discussion instead.