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