libsysutils
annotate src/datapath_unix.c @ 2:36936815cc92
foo
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 08 May 2015 07:26:01 +0300 |
parents | |
children |
rev | line source |
---|---|
nuclear@2 | 1 #ifdef __unix__ |
nuclear@2 | 2 |
nuclear@2 | 3 #include <stdio.h> |
nuclear@2 | 4 #include <stdlib.h> |
nuclear@2 | 5 #include <string.h> |
nuclear@2 | 6 #include <unistd.h> |
nuclear@2 | 7 #include <pwd.h> |
nuclear@2 | 8 #include "datapath.h" |
nuclear@2 | 9 #include "sysu_impl.h" |
nuclear@2 | 10 |
nuclear@2 | 11 int sysu_impl_getdir(enum sysu_dir_type type, char *buf, int sz) |
nuclear@2 | 12 { |
nuclear@2 | 13 switch(type) { |
nuclear@2 | 14 case SYSU_DATA_DIR: |
nuclear@2 | 15 if(sysu_state.appname && sysu_state.prefix) { |
nuclear@2 | 16 return snprintf(buf, sz, "%s/share/%s", sysu_state.prefix, sysu_state.appname); |
nuclear@2 | 17 } |
nuclear@2 | 18 break; |
nuclear@2 | 19 |
nuclear@2 | 20 case SYSU_STORAGE_DIR: |
nuclear@2 | 21 case SYSU_CONFIG_DIR: |
nuclear@2 | 22 if(sysu_state.appname) { |
nuclear@2 | 23 int homelen = sysu_impl_getdir(SYSU_HOME_DIR, buf, sz); |
nuclear@2 | 24 return homelen + snprintf(buf + homelen, sz - homelen, "/.config/%s", sysu_state.appname); |
nuclear@2 | 25 } |
nuclear@2 | 26 break; |
nuclear@2 | 27 |
nuclear@2 | 28 case SYSU_TMP_DIR: |
nuclear@2 | 29 strncpy(buf, "/tmp", sz - 1); |
nuclear@2 | 30 return 4; |
nuclear@2 | 31 |
nuclear@2 | 32 case SYSU_HOME_DIR: |
nuclear@2 | 33 { |
nuclear@2 | 34 struct passwd pwd, *res; |
nuclear@2 | 35 char tmp[512], *home; |
nuclear@2 | 36 getpwuid_r(getuid(), &pwd, tmp, sizeof tmp, &res); |
nuclear@2 | 37 if(res) { |
nuclear@2 | 38 home = pwd.pw_dir; |
nuclear@2 | 39 } else { |
nuclear@2 | 40 home = getenv("HOME"); |
nuclear@2 | 41 } |
nuclear@2 | 42 if(home) { |
nuclear@2 | 43 strncpy(buf, home, sz - 1); |
nuclear@2 | 44 return strlen(buf); |
nuclear@2 | 45 } |
nuclear@2 | 46 } |
nuclear@2 | 47 break; |
nuclear@2 | 48 |
nuclear@2 | 49 case SYSU_CURRENT_DIR: |
nuclear@2 | 50 return strlen(getcwd(buf, sz)); |
nuclear@2 | 51 } |
nuclear@2 | 52 |
nuclear@2 | 53 /* failed, return an empty path */ |
nuclear@2 | 54 *buf = 0; |
nuclear@2 | 55 return 0; |
nuclear@2 | 56 } |
nuclear@2 | 57 |
nuclear@2 | 58 #endif |