ASSession * GetNCASSession (ScreenInfo *scr, const char *home, const char *share ) { ASSession *session = NULL; char *ashome = put_file_home (home?home:as_afterstep_dir_name); char *asshare = put_file_home (share?share:as_share_dir_name); if( scr == NULL ) scr = ASDefaultScr ; check_AfterStep_dirtree (ashome, True); session = create_assession (scr, ashome, asshare); #ifdef DIFFERENTLOOKNFEELFOREACHDESKTOP /* TODO : add check of non-cf dir for desktop specific configs : */ #endif session->scr = scr ; return session; }
static int CheckOrCreateFile (const char *what) { int res = 0; if (*what == '~' && *(what + 1) == '/') { char *checkfile = put_file_home (what); if (CheckFile (checkfile) != 0) res = MakeASFile (checkfile); free (checkfile); } else if (CheckFile (what) != 0) res = MakeASFile (what); return res; }
int CheckOrCreate (const char *what) { mode_t perms = 0755; int res = 0; if (*what == '~' && *(what + 1) == '/') { char *checkdir = put_file_home (what); if (CheckDir (checkdir) != 0) res = MakeASDir (checkdir, perms); free (checkdir); } else if (CheckDir (what) != 0) res = MakeASDir (what, perms); return res; }
void load_feel_menu( ASFeel *feel, char *location ) { char *fullfilename ; if( location && feel ) { fullfilename = put_file_home( location ); #if 0 if ( CheckDir (fullfilename) == 0 ) dir2menu_data( fullfilename, &(feel->menus_list)); else if ( CheckFile (fullfilename) == 0 ) file2menu_data( fullfilename, &(feel->menus_list)); else show_error("unable to locate menu at location [%s].", fullfilename); #endif free( fullfilename ); } }
char * asim_find_file (const char *file, const char *pathlist, int type) { char *path; register int len; int max_path = 0; register char *ptr; register int i; Bool local = False ; if (file == NULL) return NULL; #ifdef _WIN32 #define PATH_SEPARATOR_CHAR ';' #define PATH_CHAR '\\' #else #define PATH_SEPARATOR_CHAR ':' #define PATH_CHAR '/' #endif if (*file == PATH_CHAR || *file == '~' || ((pathlist == NULL) || (*pathlist == '\0'))) local = True ; else if( file[0] == '.' && (file[1] == PATH_CHAR || (file[1] == '.' && file[2] == PATH_CHAR))) local = True ; else if( strncmp( file, "$HOME", 5) == 0 ) local = True ; if( local ) { path = put_file_home (file); if ( access (path, type) == 0 ) { return path; } free (path); return NULL; } /* return put_file_home(file); */ for (i = 0; file[i]; i++); len = i ; for (ptr = (char *)pathlist; *ptr; ptr += i) { if (*ptr == PATH_SEPARATOR_CHAR ) ptr++; for (i = 0; ptr[i] && ptr[i] != PATH_SEPARATOR_CHAR; i++); if (i > max_path) max_path = i; } path = safecalloc (1, max_path + 1 + len + 1); strcpy( path+max_path+1, file ); path[max_path] = PATH_CHAR ; ptr = (char*)&(pathlist[0]) ; while( ptr[0] != '\0' ) { int skip ; for( i = 0 ; ptr[i] == PATH_SEPARATOR_CHAR; ++i ); ptr += i ; for( i = 0 ; ptr[i] != PATH_SEPARATOR_CHAR && ptr[i] != '\0'; ++i ); skip = i ; if( i > 0 && ptr[i-1] == PATH_CHAR ) i-- ; if( i > 0 ) { register char *try_path = path+max_path-i; strncpy( try_path, ptr, i ); if (access(try_path, type) == 0) { char* res = mystrdup(try_path); free( path ); return res; } } ptr += skip ; } free (path); return NULL; }