15d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o/* 25d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o * gen_uuid.c --- generate a DCE-compatible uuid 35d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o * 45dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o * Copyright (C) 1999, Andreas Dilger and Theodore Ts'o 55d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o * 65d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o * %Begin-Header% 75d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o * This file may be redistributed under the terms of the GNU Public 85d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o * License. 95d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o * %End-Header% 105d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o */ 115d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o 125d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o#include <stdio.h> 136b7e807e0a69462b4757facdd8a0b2ce364da679Theodore Ts'o#ifdef HAVE_STDLIB_H 14c8c071a07319939dfd7ae2ff1dedec644d750debTheodore Ts'o#include <stdlib.h> 156b7e807e0a69462b4757facdd8a0b2ce364da679Theodore Ts'o#endif 165dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o#ifdef HAVE_GETOPT_H 175dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o#include <getopt.h> 18373b8337c7b6c6243810be250083fa4773891e92Theodore Ts'o#else 19a63830271b5143416981f1171503e10bd6b6056fMatthias Andreeextern int getopt(int argc, char * const argv[], const char *optstring); 20373b8337c7b6c6243810be250083fa4773891e92Theodore Ts'oextern char *optarg; 21373b8337c7b6c6243810be250083fa4773891e92Theodore Ts'oextern int optind; 225dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o#endif 235d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o#include "uuid/uuid.h" 24d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o#include "nls-enable.h" 255d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o 265dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o#define DO_TYPE_TIME 1 275dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o#define DO_TYPE_RANDOM 2 285dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o 29c8c071a07319939dfd7ae2ff1dedec644d750debTheodore Ts'ostatic void usage(const char *progname) 305dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o{ 31d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o fprintf(stderr, _("Usage: %s [-r] [-t]\n"), progname); 325dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o exit(1); 335dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o} 345dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o 355d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'oint 365d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'omain (int argc, char *argv[]) 375d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o{ 385dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o int c; 395dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o int do_type = 0; 405dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o char str[37]; 415dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o uuid_t uu; 425d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o 43ddc32a045bd3bd35968ace2dbe22179470baec0bTheodore Ts'o#ifdef ENABLE_NLS 44ddc32a045bd3bd35968ace2dbe22179470baec0bTheodore Ts'o setlocale(LC_MESSAGES, ""); 45ddc32a045bd3bd35968ace2dbe22179470baec0bTheodore Ts'o setlocale(LC_CTYPE, ""); 46ddc32a045bd3bd35968ace2dbe22179470baec0bTheodore Ts'o bindtextdomain(NLS_CAT_NAME, LOCALEDIR); 47ddc32a045bd3bd35968ace2dbe22179470baec0bTheodore Ts'o textdomain(NLS_CAT_NAME); 48ddc32a045bd3bd35968ace2dbe22179470baec0bTheodore Ts'o#endif 49ddc32a045bd3bd35968ace2dbe22179470baec0bTheodore Ts'o 505dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o while ((c = getopt (argc, argv, "tr")) != EOF) 515dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o switch (c) { 525dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o case 't': 535dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o do_type = DO_TYPE_TIME; 545dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o break; 555dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o case 'r': 565dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o do_type = DO_TYPE_RANDOM; 575dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o break; 585dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o default: 595dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o usage(argv[0]); 605dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o } 61efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 625dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o switch (do_type) { 635dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o case DO_TYPE_TIME: 645dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o uuid_generate_time(uu); 655dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o break; 665dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o case DO_TYPE_RANDOM: 675dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o uuid_generate_random(uu); 685dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o break; 695dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o default: 705dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o uuid_generate(uu); 715dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o break; 725dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o } 73efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 745dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o uuid_unparse(uu, str); 755d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o 765dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o printf("%s\n", str); 775d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o 785dbb072e27bea6f740822590e348da6ae4db2d60Theodore Ts'o return 0; 795d45d80375943be8917302a502f3f28d2df8d16dTheodore Ts'o} 80