1 /* -*- mode: C; c-file-style: "gnu" -*- */ 2 /* dbus-uuidgen.c The guts of the dbus-uuidgen binary live in libdbus, in this file. 3 * 4 * Copyright (C) 2006 Red Hat, Inc. 5 * 6 * Licensed under the Academic Free License version 2.1 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 * 22 */ 23 #include "dbus-uuidgen.h" 24 #include "dbus-internals.h" 25 #include "dbus-string.h" 26 #include "dbus-protocol.h" 27 28 #ifdef DBUS_WIN 29 #error "dbus-uuidgen should not be needed on Windows" 30 #endif 31 32 /** 33 * @defgroup DBusInternalsUuidgen dbus-uuidgen implementation 34 * @ingroup DBusInternals 35 * @brief Functions for dbus-uuidgen binary 36 * 37 * These are not considered part of the ABI, and if you call them 38 * you will get screwed by future changes. 39 * 40 * @{ 41 */ 42 43 static dbus_bool_t 44 return_uuid (DBusGUID *uuid, 45 char **uuid_p, 46 DBusError *error) 47 { 48 if (uuid_p) 49 { 50 DBusString encoded; 51 _dbus_string_init (&encoded); 52 if (!_dbus_uuid_encode (uuid, &encoded) || 53 !_dbus_string_steal_data (&encoded, uuid_p)) 54 { 55 _DBUS_SET_OOM (error); 56 _dbus_string_free (&encoded); 57 return FALSE; 58 } 59 _dbus_string_free (&encoded); 60 } 61 return TRUE; 62 } 63 64 /** 65 * For use by the dbus-uuidgen binary ONLY, do not call this. 66 * We can and will change this function without modifying 67 * the libdbus soname. 68 * 69 * @param filename the file or #NULL for the machine ID file 70 * @param uuid_p out param to return the uuid 71 * @param create_if_not_found whether to create it if not already there 72 * @param error error return 73 * @returns #FALSE if error is set 74 */ 75 dbus_bool_t 76 dbus_internal_do_not_use_get_uuid (const char *filename, 77 char **uuid_p, 78 dbus_bool_t create_if_not_found, 79 DBusError *error) 80 { 81 DBusGUID uuid; 82 83 if (filename) 84 { 85 DBusString filename_str; 86 _dbus_string_init_const (&filename_str, filename); 87 if (!_dbus_read_uuid_file (&filename_str, &uuid, create_if_not_found, error)) 88 goto error; 89 } 90 else 91 { 92 if (!_dbus_read_local_machine_uuid (&uuid, create_if_not_found, error)) 93 goto error; 94 } 95 96 if (!return_uuid(&uuid, uuid_p, error)) 97 goto error; 98 99 return TRUE; 100 101 error: 102 _DBUS_ASSERT_ERROR_IS_SET (error); 103 return FALSE; 104 } 105 106 /** 107 * For use by the dbus-uuidgen binary ONLY, do not call this. 108 * We can and will change this function without modifying 109 * the libdbus soname. 110 * 111 * @param uuid_p out param to return the uuid 112 * @returns #FALSE if no memory 113 */ 114 dbus_bool_t 115 dbus_internal_do_not_use_create_uuid (char **uuid_p) 116 { 117 DBusGUID uuid; 118 119 _dbus_generate_uuid (&uuid); 120 return return_uuid (&uuid, uuid_p, NULL); 121 } 122 123 /** @} */ 124