Home | History | Annotate | Download | only in dbus
      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