Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I achieve tilde expansion in C?

Tags:

c

chdir("~/") doesn't seem to work. Am I expected to look at the string and substitute tilde by hand, or is there some better way?

like image 290
artagnon Avatar asked Apr 13 '13 18:04

artagnon


3 Answers

POSIX provides wordexp(3) to perform shell-like expansion, including tilde expansion.

like image 132
Cairnarvon Avatar answered Oct 23 '22 04:10

Cairnarvon


You can you use wordexp example below

#include <stdio.h>
#include <wordexp.h>

int main(int argc, char* argv[]) {
    wordexp_t exp_result;
    wordexp(argv[1], &exp_result, 0);
    printf("%s\n", exp_result.we_wordv[0]);
}
like image 18
FDinoff Avatar answered Oct 23 '22 06:10

FDinoff


The tilde in a path is a shell specific thing. What you can do see if the first character is a tilde and a slash (or a tilde end end of the string), then replace the tilde with the value of the environment variable HOME (which you can get from getenv).

If the second character is not a slash, it's most likely in the form of ~user/path. Then you have to extract the user-name and use e.g. getpwnam to get the password entry of the user, which contains that users home directory.

like image 8
Some programmer dude Avatar answered Oct 23 '22 05:10

Some programmer dude