diff options
Diffstat (limited to 'winsup/cygwin/pwdgrp.h')
-rw-r--r-- | winsup/cygwin/pwdgrp.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/winsup/cygwin/pwdgrp.h b/winsup/cygwin/pwdgrp.h new file mode 100644 index 000000000..bc27c7bb8 --- /dev/null +++ b/winsup/cygwin/pwdgrp.h @@ -0,0 +1,57 @@ +/* pwdgrp.h + + Copyright 2001 Red Hat inc. + + Stuff common to pwd and grp handling. + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +enum pwdgrp_state { + uninitialized = 0, + initializing, + emulated, + loaded +}; + +class pwdgrp_check { + pwdgrp_state state; + FILETIME last_modified; + char file_w32[MAX_PATH]; + +public: + pwdgrp_check () : state (uninitialized) {} + operator pwdgrp_state () + { + if (state != uninitialized && file_w32[0] && cygheap->etc_changed ()) + { + HANDLE h; + WIN32_FIND_DATA data; + + if ((h = FindFirstFile (file_w32, &data)) != INVALID_HANDLE_VALUE) + { + if (CompareFileTime (&data.ftLastWriteTime, &last_modified) > 0) + state = uninitialized; + FindClose (h); + } + } + return state; + } + void operator = (pwdgrp_state nstate) + { + state = nstate; + } + void set_last_modified (FILE *f) + { + if (!file_w32[0]) + strcpy (file_w32, cygheap->fdtab[fileno (f)]->get_win32_name ()); + + BY_HANDLE_FILE_INFORMATION inf; + if (GetFileInformationByHandle (cygheap->fdtab[fileno (f)]->get_handle (), + &inf)) + last_modified = inf.ftLastWriteTime; + } +}; |