// // aegis - project change supervisor // Copyright (C) 2002-2006, 2008 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #include #include #include #include #include static nstring find_temp_dir(int at_home) { if (at_home) { const char *cp = getenv("HOME"); if (cp && *cp) return cp; } return nstring(os_tmpdir()); } string_ty * os_edit_filename(int at_home) { nstring dir = find_temp_dir(at_home); int name_max = 14; if (os_become_active()) { name_max = os_pathconf_name_max(dir.get_ref()); } else { os_become_orig(); name_max = os_pathconf_name_max(dir.get_ref()); os_become_undo(); } nstring prog = nstring::format("%.*s", name_max / 2, progname_get()); nstring glunk(universal_unique_identifier()); // // Build the name of the temporary file. If one of the parts // has to be made smaller, because otherwise the file name would // be too long, throw away some of the UUID. On modern Unix // implementations this will not happen. // return str_format ( "%s/%s-%.*s", dir.c_str(), prog.c_str(), (int)(name_max - prog.size() - 1), glunk.c_str() ); }