Whamcloud - gitweb
LU-2675 libcfs: remove libcfs posix headers 87/11987/5
authorJohn L. Hammond <john.hammond@intel.com>
Mon, 3 Nov 2014 19:42:49 +0000 (14:42 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 11 Nov 2014 11:48:08 +0000 (11:48 +0000)
Remove libcfs/include/libcfs/posix/. Include what was needed from
libcfs/posix/libcfs.h into libcfs/libcfs.h or in the appropriate .c
file.

Signed-off-by: John L. Hammond <john.hammond@intel.com>
Change-Id: Ia3016c83f13554b617c5f4a6dcc86adf222d4e49
Reviewed-on: http://review.whamcloud.com/11987
Tested-by: Jenkins
Reviewed-by: Bob Glossman <bob.glossman@intel.com>
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
17 files changed:
libcfs/autoconf/lustre-libcfs.m4
libcfs/include/libcfs/Makefile.am
libcfs/include/libcfs/libcfs.h
libcfs/include/libcfs/posix/.gitignore [deleted file]
libcfs/include/libcfs/posix/Makefile.am [deleted file]
libcfs/include/libcfs/posix/libcfs.h [deleted file]
libcfs/include/libcfs/posix/posix-crypto.h [deleted file]
libcfs/libcfs/util/l_ioctl.c
lnet/utils/lnetctl.c
lnet/utils/lst.c
lnet/utils/portals.c
lustre/autoconf/lustre-core.m4
lustre/utils/lhsmtool_posix.c
lustre/utils/liblustreapi.c
lustre/utils/mount_lustre.c
lustre/utils/mount_utils.c
lustre/utils/obd.c

index 8b088ba..1053e91 100644 (file)
@@ -444,7 +444,6 @@ libcfs/autoconf/Makefile
 libcfs/include/Makefile
 libcfs/include/libcfs/Makefile
 libcfs/include/libcfs/linux/Makefile
 libcfs/include/Makefile
 libcfs/include/libcfs/Makefile
 libcfs/include/libcfs/linux/Makefile
-libcfs/include/libcfs/posix/Makefile
 libcfs/include/libcfs/util/Makefile
 libcfs/libcfs/Makefile
 libcfs/libcfs/autoMakefile
 libcfs/include/libcfs/util/Makefile
 libcfs/libcfs/Makefile
 libcfs/libcfs/autoMakefile
index af916b8..67bb495 100644 (file)
@@ -1,5 +1,5 @@
-SUBDIRS = linux posix util
-DIST_SUBDIRS = linux posix util
+SUBDIRS = linux util
+DIST_SUBDIRS = linux util
 
 libcfsdir = $(includedir)/libcfs
 
 
 libcfsdir = $(includedir)/libcfs
 
index 343ef86..cff0fcc 100644 (file)
 #define __LIBCFS_LIBCFS_H__
 
 #include <libcfs/types.h>
 #define __LIBCFS_LIBCFS_H__
 
 #include <libcfs/types.h>
+#include <libcfs/list.h>
 
 #ifdef __KERNEL__
 # include <libcfs/linux/libcfs.h>
 
 #ifdef __KERNEL__
 # include <libcfs/linux/libcfs.h>
-#else /* __KERNEL__ */
-# include <libcfs/posix/libcfs.h>
-#endif /* !__KERNEL__ */
+#else /* !__KERNEL__ */
+# include <assert.h>
+# include <ctype.h>
+# include <errno.h>
+# include <fcntl.h>
+# include <limits.h>
+# include <signal.h>
+# include <stdarg.h>
+# include <stdbool.h>
+# include <stddef.h>
+# include <stdint.h>
+# include <stdio.h>
+# include <stdlib.h>
+# include <string.h>
+# include <time.h>
+# include <sys/ioctl.h>
+# include <sys/socket.h>
+# include <sys/stat.h>
+# include <sys/time.h>
+# include <sys/types.h>
+# include <libcfs/user-time.h>
+# include <libcfs/user-prim.h>
+# include <libcfs/user-mem.h>
+# include <libcfs/user-lock.h>
+# include <libcfs/user-tcpip.h>
+# include <libcfs/user-bitops.h>
+#endif /* __KERNEL__ */
 
 #include "curproc.h"
 
 
 #include "curproc.h"
 
@@ -109,8 +134,6 @@ static inline int __is_po2(unsigned long long val)
 
 #ifdef __KERNEL__
 
 
 #ifdef __KERNEL__
 
-#include <libcfs/list.h>
-
 #ifndef cfs_for_each_possible_cpu
 #  error cfs_for_each_possible_cpu is not supported by kernel!
 #endif
 #ifndef cfs_for_each_possible_cpu
 #  error cfs_for_each_possible_cpu is not supported by kernel!
 #endif
diff --git a/libcfs/include/libcfs/posix/.gitignore b/libcfs/include/libcfs/posix/.gitignore
deleted file mode 100644 (file)
index 10a7e8d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-/Makefile.in
diff --git a/libcfs/include/libcfs/posix/Makefile.am b/libcfs/include/libcfs/posix/Makefile.am
deleted file mode 100644 (file)
index 1a5753c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_DIST = libcfs.h posix-crypto.h
diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
deleted file mode 100644 (file)
index 403861c..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * GPL HEADER START
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 only,
- * as published by the Free Software Foundation.
- *
- * 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 version 2 for more details (a copy is included
- * in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
- *
- * GPL HEADER END
- */
-/*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
- * Use is subject to license terms.
- *
- * Copyright (c) 2012, 2013, Intel Corporation.
- */
-/*
- * This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
- *
- * libcfs/include/libcfs/posix/libcfs.h
- *
- * Defines for posix userspace.
- *
- * Author: Robert Read <rread@sun.com>
- */
-
-#ifndef __LIBCFS_POSIX_LIBCFS_H__
-#define __LIBCFS_POSIX_LIBCFS_H__
-
-#include <errno.h>
-#include <sys/errno.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <assert.h>
-#include <sys/ioctl.h>
-#include <sys/signal.h>
-#include <signal.h>
-#include <sys/time.h>
-#include <time.h>
-#include <getopt.h>
-#include <signal.h>
-#include <pwd.h>
-#include <sys/socket.h>
-#include <sys/utsname.h>
-#include <ctype.h>
-#include <stdbool.h>
-#include <limits.h>
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_LIBPTHREAD
-#include <pthread.h>
-#endif
-
-#if defined(HAVE_SYS_TYPES_H)
-#include <sys/types.h>
-#endif
-
-#ifdef HAVE_SYS_USER_H
-# include <sys/user.h>
-#endif
-
-#ifdef HAVE_SYS_VFS_H
-# include <sys/vfs.h>
-#endif
-
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-
-#include <libcfs/list.h>
-#include <libcfs/user-time.h>
-#include <libcfs/user-prim.h>
-#include <libcfs/user-mem.h>
-#include <libcfs/user-lock.h>
-#include <libcfs/user-tcpip.h>
-#include <libcfs/user-bitops.h>
-
-#define do_gettimeofday(tv) gettimeofday(tv, NULL);
-typedef unsigned long long cfs_cycles_t;
-
-/* this goes in posix-fs.h */
-#include <sys/mount.h>
-
-#include <mntent.h>
-
-#define fget(x) NULL
-#define fput(f) do {} while (0)
-
-#ifndef THREAD_SIZE /* x86_64 linux has THREAD_SIZE in userspace */
-# define THREAD_SIZE 8192
-#endif /* THREAD_SIZE */
-
-#define CFS_CHECK_STACK(msgdata, mask, cdls) do {} while(0)
-#define CDEBUG_STACK() (0L)
-
-/**
- * Platform specific declarations for cfs_curproc API (libcfs/curproc.h)
- *
- * Implementation is in linux-curproc.c
- */
-#define CFS_CURPROC_COMM_MAX (sizeof ((struct task_struct *)0)->comm)
-
-typedef __u32 kernel_cap_t;
-
-/**
- * Module support (probably shouldn't be used in generic code?)
- */
-struct module {
-        int count;
-        char *name;
-};
-
-static inline void MODULE_AUTHOR(char *name)
-{
-        printf("%s\n", name);
-}
-#define MODULE_DESCRIPTION(name) MODULE_AUTHOR(name)
-#define MODULE_LICENSE(name) MODULE_AUTHOR(name)
-
-#define THIS_MODULE (void *)0x11111
-#define __init
-#define __exit
-
-static inline int request_module(const char *name, ...)
-{
-       return (-EINVAL);
-}
-
-static inline void __module_get(struct module *module)
-{
-}
-
-static inline int try_module_get(struct module *module)
-{
-       return 1;
-}
-
-static inline void module_put(struct module *module)
-{
-}
-
-
-static inline int module_refcount(struct module *m)
-{
-       return 1;
-}
-
-/***************************************************************************
- *
- * Linux kernel slab shrinker emulation. Currently used only in lu_object.c
- *
- ***************************************************************************/
-
-struct shrinker {
-#ifndef __INTEL_COMPILER
-       ;
-#endif
-};
-
-struct shrinker_var {
-#ifndef __INTEL_COMPILER
-       ;
-#endif
-};
-
-#define DEF_SHRINKER_VAR(name, shrink, count, scan) \
-               struct shrinker_var name = {};
-
-#define DEFAULT_SEEKS (0)
-
-static inline
-struct shrinker *set_shrinker(int seeks, struct shrinker_var *var)
-{
-       return (struct shrinker *)0xdeadbea1; /* Cannot return NULL here */
-}
-
-static inline void remove_shrinker(struct shrinker *shrinker)
-{
-}
-
-/***************************************************************************
- *
- * Linux kernel radix tree emulation.
- *
- * XXX this stub-implementation assumes that elements stored in a radix tree
- *     are struct page's and nothing else. Proper implementation will be
- *     committed soon.
- *
- ***************************************************************************/
-
-struct radix_tree_root {
-       struct list_head list;
-       void *rnode;
-};
-
-struct radix_tree_node {
-       struct list_head _node;
-       unsigned long index;
-       void *item;
-};
-
-#define RADIX_TREE_INIT(mask)   {      \
-               NOT_IMPLEMENTED         \
-}
-
-#define RADIX_TREE(name, mask) \
-        struct radix_tree_root name = RADIX_TREE_INIT(mask)
-
-
-#define INIT_RADIX_TREE(root, mask)                                    \
-do {                                                                   \
-       INIT_LIST_HEAD(&((struct radix_tree_root *)root)->list);        \
-       ((struct radix_tree_root *)root)->rnode = NULL;                 \
-} while (0)
-
-static inline int radix_tree_insert(struct radix_tree_root *root,
-                                       unsigned long idx, void *item)
-{
-       struct radix_tree_node *node;
-       node = malloc(sizeof(*node));
-       if (!node)
-               return -ENOMEM;
-
-       INIT_LIST_HEAD(&node->_node);
-       node->index = idx;
-       node->item = item;
-       list_add_tail(&node->_node, &root->list);
-       root->rnode = (void *)1001;
-       return 0;
-}
-
-static inline struct radix_tree_node *
-radix_tree_lookup0(struct radix_tree_root *root, unsigned long idx)
-{
-       struct radix_tree_node *node;
-
-       if (list_empty(&root->list))
-               return NULL;
-
-       list_for_each_entry(node, &root->list, _node)
-               if (node->index == idx)
-                       return node;
-
-       return NULL;
-}
-
-static inline void *radix_tree_lookup(struct radix_tree_root *root,
-                                       unsigned long idx)
-{
-       struct radix_tree_node *node = radix_tree_lookup0(root, idx);
-
-       if (node)
-               return node->item;
-       return node;
-}
-
-static inline void *radix_tree_delete(struct radix_tree_root *root,
-                                       unsigned long idx)
-{
-       struct radix_tree_node *p = radix_tree_lookup0(root, idx);
-       void *item;
-
-       if (p == NULL)
-               return NULL;
-
-       list_del_init(&p->_node);
-       item = p->item;
-       free(p);
-       if (list_empty(&root->list))
-               root->rnode = NULL;
-
-       return item;
-}
-
-static inline unsigned int
-radix_tree_gang_lookup(struct radix_tree_root *root, void **results,
-                       unsigned long first_index, unsigned int max_items)
-{
-        int i;
-        int j = 0;
-
-        for (i = 0; i < max_items; i++, first_index++) {
-                results[j++] = radix_tree_lookup(root, first_index);
-                if (results[j - 1] == NULL)
-                        --j;
-        }
-
-        return j;
-}
-
-static inline int radix_tree_preload(int gfp_mask)
-{
-        return 0;
-}
-
-void radix_tree_init(void);
-
-static inline void radix_tree_preload_end(void)
-{
-}
-
-/***************************************************************************
- *
- * Linux kernel red black tree emulation.
- *
- ***************************************************************************/
-struct rb_node {
-       unsigned long  rb_parent_color;
-#define        RB_RED          0
-#define        RB_BLACK        1
-       struct rb_node *rb_right;
-       struct rb_node *rb_left;
-};
-
-struct rb_root {
-       struct rb_node *rb_node;
-};
-
-
-#define rb_parent(r)   ((struct rb_node *)((r)->rb_parent_color & ~3))
-#define rb_color(r)   ((r)->rb_parent_color & 1)
-#define rb_is_red(r)   (!rb_color(r))
-#define rb_is_black(r) rb_color(r)
-#define rb_set_red(r)  do { (r)->rb_parent_color &= ~1; } while (0)
-#define rb_set_black(r)  do { (r)->rb_parent_color |= 1; } while (0)
-
-static inline void rb_set_parent(struct rb_node *rb, struct rb_node *p)
-{
-       rb->rb_parent_color = (rb->rb_parent_color & 3) | (unsigned long)p;
-}
-static inline void rb_set_color(struct rb_node *rb, int color)
-{
-       rb->rb_parent_color = (rb->rb_parent_color & ~1) | color;
-}
-
-#define RB_ROOT        ((struct rb_root) { NULL, })
-#define rb_entry(ptr, type, member) container_of(ptr, type, member)
-
-#define RB_EMPTY_ROOT(root)    ((root)->rb_node == NULL)
-#define RB_EMPTY_NODE(node)    (rb_parent(node) == node)
-#define RB_CLEAR_NODE(node)    (rb_set_parent(node, node))
-
-static inline void rb_init_node(struct rb_node *rb)
-{
-       rb->rb_parent_color = 0;
-       rb->rb_right = NULL;
-       rb->rb_left = NULL;
-       RB_CLEAR_NODE(rb);
-}
-
-extern void rb_insert_color(struct rb_node *, struct rb_root *);
-extern void rb_erase(struct rb_node *, struct rb_root *);
-
-/* Find logical next and previous nodes in a tree */
-extern struct rb_node *rb_next(const struct rb_node *);
-extern struct rb_node *rb_prev(const struct rb_node *);
-extern struct rb_node *rb_first(const struct rb_root *);
-extern struct rb_node *rb_last(const struct rb_root *);
-static inline void rb_link_node(struct rb_node *node, struct rb_node *parent,
-                               struct rb_node **rb_link)
-{
-       node->rb_parent_color = (unsigned long)parent;
-       node->rb_left = node->rb_right = NULL;
-
-       *rb_link = node;
-}
-
-/***************************************************************************
- *
- * End of Linux kernel red black tree emulation.
- *
- ***************************************************************************/
-
-typedef ssize_t (*read_actor_t)();
-
-# ifndef IFTODT
-#  define IFSHIFT              12
-#  define IFTODT(type)         (((type) & S_IFMT) >> IFSHIFT)
-#  define DTTOIF(dirtype)      ((dirtype) << IFSHIFT)
-# endif
-
-#ifndef ERESTARTSYS
-#define ERESTARTSYS ERESTART
-#endif
-
-#endif
diff --git a/libcfs/include/libcfs/posix/posix-crypto.h b/libcfs/include/libcfs/posix/posix-crypto.h
deleted file mode 100644 (file)
index 72a9fc1..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * GPL HEADER START
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 only,
- * as published by the Free Software Foundation.
- *
- * 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 version 2 for more details (a copy is included
- * in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU General Public License
- * version 2 along with this program; If not, see http://www.gnu.org/licenses
- *
- * Please  visit http://www.xyratex.com/contact if you need additional
- * information or have any questions.
- *
- * GPL HEADER END
- */
-
-/*
- * Copyright 2012 Xyratex Technology Limited
- */
-
-/**
- *      User crypto hash specific functions.
- */
-
-/**
- *      CRC32 functions.
- */
-int crc32init_le(void);
-unsigned int crc32_le(unsigned int crc, unsigned char const *p, size_t len);
-
-/**
- *      Adler32 functions.
- */
-unsigned long zlib_adler32(unsigned long adler,
-                          const unsigned char *buf,
-                          unsigned int len);
index fe35073..cf1fcd9 100644 (file)
@@ -20,6 +20,8 @@
 
 #define __USE_FILE_OFFSET64
 
 
 #define __USE_FILE_OFFSET64
 
+#include <sys/ioctl.h>
+#include <sys/mman.h>
 #include <libcfs/libcfsutil.h>
 #include <lnet/lnetctl.h>
 
 #include <libcfs/libcfsutil.h>
 #include <lnet/lnetctl.h>
 
index eb189b2..3750417 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <getopt.h>
 #include <lnet/lnetctl.h>
 #include <libcfs/libcfsutil.h>
 #include "cyaml/cyaml.h"
 #include <lnet/lnetctl.h>
 #include <libcfs/libcfsutil.h>
 #include "cyaml/cyaml.h"
index abe2acf..29f9046 100644 (file)
@@ -38,6 +38,8 @@
  * Author: Liang Zhen <liangzhen@clusterfs.com>
  */
 
  * Author: Liang Zhen <liangzhen@clusterfs.com>
  */
 
+#include <getopt.h>
+#include <pwd.h>
 #include <libcfs/libcfsutil.h>
 #include <lnet/lnetctl.h>
 #include <lnet/lnetst.h>
 #include <libcfs/libcfsutil.h>
 #include <lnet/lnetctl.h>
 #include <lnet/lnetst.h>
index a2a9f31..fc6cb51 100644 (file)
@@ -23,6 +23,8 @@
 #include <lnet/lnetctl.h>
 #include <lnet/socklnd.h>
 #include <lnet/lib-dlc.h>
 #include <lnet/lnetctl.h>
 #include <lnet/socklnd.h>
 #include <lnet/lib-dlc.h>
+#include <getopt.h>
+#include <netdb.h>
 
 unsigned int libcfs_debug;
 unsigned int libcfs_printk = D_CANTMASK;
 
 unsigned int libcfs_debug;
 unsigned int libcfs_printk = D_CANTMASK;
index 7639075..a87ccca 100644 (file)
@@ -1856,9 +1856,8 @@ AS_IF([test $target_cpu == "i686" -o $target_cpu == "x86_64"],
 # maximum MDS thread count
 LC_MDS_MAX_THREADS
 
 # maximum MDS thread count
 LC_MDS_MAX_THREADS
 
-# libcfs/include/libcfs/posix/libcfs.h
 # lustre/utils/llverdev.c
 # lustre/utils/llverdev.c
-AC_CHECK_HEADERS([sys/user.h sys/vfs.h stdint.h blkid/blkid.h])
+AC_CHECK_HEADERS([blkid/blkid.h])
 
 # libcfs/include/libcfs/linux/linux-prim.h, ...
 AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h])
 
 # libcfs/include/libcfs/linux/linux-prim.h, ...
 AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h])
index 183d910..dda8551 100644 (file)
@@ -41,6 +41,7 @@
 #include <stdlib.h>
 #include <dirent.h>
 #include <errno.h>
 #include <stdlib.h>
 #include <dirent.h>
 #include <errno.h>
+#include <getopt.h>
 #include <time.h>
 #include <utime.h>
 #include <sys/time.h>
 #include <time.h>
 #include <utime.h>
 #include <sys/time.h>
index 4a81941..c211a6e 100644 (file)
@@ -45,6 +45,7 @@
 #define _GNU_SOURCE
 #endif
 
 #define _GNU_SOURCE
 #endif
 
+#include <mntent.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
index b070623..fd93d5c 100644 (file)
 #define _GNU_SOURCE
 #endif
 #include "mount_utils.h"
 #define _GNU_SOURCE
 #endif
 #include "mount_utils.h"
+#include <getopt.h>
+#include <mntent.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
 #include <string.h>
+#include <sys/mount.h>
 #include "obdctl.h"
 #include <lustre_ver.h>
 #include <ctype.h>
 #include "obdctl.h"
 #include <lustre_ver.h>
 #include <ctype.h>
index f7a62ed..7383f21 100644 (file)
 #endif /* HAVE_CONFIG_H */
 
 #include "mount_utils.h"
 #endif /* HAVE_CONFIG_H */
 
 #include "mount_utils.h"
+#include <mntent.h>
 #include <stdio.h>
 #include <errno.h>
 #include <string.h>
 #include <config.h>
 #include <lustre_disk.h>
 #include <lustre_ver.h>
 #include <stdio.h>
 #include <errno.h>
 #include <string.h>
 #include <config.h>
 #include <lustre_disk.h>
 #include <lustre_ver.h>
+#include <sys/mount.h>
 #include <sys/stat.h>
 #include <sys/utsname.h>
 #include <linux/loop.h>
 #include <sys/stat.h>
 #include <sys/utsname.h>
 #include <linux/loop.h>
index 4acdf7f..aa9117f 100644 (file)
@@ -52,6 +52,7 @@
 #include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <getopt.h>
 #include <glob.h>
 #include <signal.h>
 #include <stdarg.h>
 #include <glob.h>
 #include <signal.h>
 #include <stdarg.h>