summaryrefslogtreecommitdiffstats
path: root/tools/h5jam/getub.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/h5jam/getub.c')
-rw-r--r--tools/h5jam/getub.c167
1 files changed, 167 insertions, 0 deletions
diff --git a/tools/h5jam/getub.c b/tools/h5jam/getub.c
new file mode 100644
index 0000000..e2aec5c
--- /dev/null
+++ b/tools/h5jam/getub.c
@@ -0,0 +1,167 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by the Board of Trustees of the University of Illinois. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the files COPYING and Copyright.html. COPYING can be found at the root *
+ * of the source code distribution tree; Copyright.html can be found at the *
+ * root level of an installed copy of the electronic HDF5 document set and *
+ * is linked from the top-level documents page. It can also be found at *
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have *
+ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "h5tools_utils.h"
+
+void parse_command_line (int argc, const char *argv[]);
+
+#define TRUE 1
+#define FALSE 0
+
+static char *progname="getub";
+char *nbytes = NULL;
+
+static const char *s_opts = "c:"; /* add more later ? */
+static struct long_options l_opts[] = {
+ {"c", require_arg, 'c'}, /* input file */
+ {NULL, 0, '\0'}
+};
+
+/*-------------------------------------------------------------------------
+ * Function: usage
+ *
+ * Purpose: Print the usage message
+ *
+ * Return: void
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage (const char *prog)
+{
+ fflush (stdout);
+ fprintf (stdout, "usage: %s -c nb file] \n", prog);
+ fprintf (stdout, " print first 'nb' byts of file to stdoug.\n");
+}
+
+/*-------------------------------------------------------------------------
+ * Function: parse_command_line
+ *
+ * Purpose: Parse the command line for the h5dumper.
+ *
+ * Return: Success:
+ *
+ * Failure: Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void
+parse_command_line (int argc, const char *argv[])
+{
+ int opt = FALSE;
+
+ /* parse command line options */
+ while ((opt = get_option (argc, argv, s_opts, l_opts)) != EOF)
+ {
+ switch ((char) opt)
+ {
+ case 'c':
+ nbytes = strdup (opt_arg);
+ break;
+ case '?':
+ default:
+ usage (progname);
+ exit (EXIT_FAILURE);
+ }
+ }
+
+ if (argc <= opt_ind)
+ {
+ error_msg (progname, "missing file name\n");
+ usage (progname);
+ exit (EXIT_FAILURE);
+ }
+}
+
+int
+main (int argc, const char *argv[])
+{
+ int fd;
+ unsigned int size;
+ char *filename;
+ long res;
+ char *buf;
+
+ parse_command_line (argc, argv);
+
+ if (nbytes == NULL)
+ {
+ /* missing arg */
+ error_msg (progname, "missing size\n");
+ usage (progname);
+ exit (EXIT_FAILURE);
+ }
+ if (argc <= (opt_ind))
+ {
+ error_msg (progname, "missing file name\n");
+ usage (progname);
+ exit (EXIT_FAILURE);
+ }
+ filename = strdup (argv[opt_ind]);
+
+ size = 0;
+ res = sscanf (nbytes, "%u", &size);
+ if (res == EOF)
+ {
+ /* fail */
+ error_msg (progname, "missing file name\n");
+ usage (progname);
+ exit (EXIT_FAILURE);
+ }
+
+ fd = open (filename, O_RDONLY);
+ if (fd < 0)
+ {
+ error_msg (progname, "can't open file %s\n", filename);
+ exit (EXIT_FAILURE);
+ }
+
+ buf = malloc ((unsigned)(size + 1));
+ if (buf == NULL)
+ {
+ close (fd);
+ exit (EXIT_FAILURE);
+ }
+
+ res = read (fd, buf, (unsigned)size);
+
+ if (res < size)
+ {
+ if (buf)
+ free (buf);
+ close (fd);
+ exit (EXIT_FAILURE);
+ }
+
+ write (1, buf, (unsigned)size);
+
+ if (buf)
+ free (buf);
+ close (fd);
+ return (EXIT_SUCCESS);
+}