[PATCH] use time32_t consistently in xfsdump tree
Bill Kendall
wkendall at sgi.com
Wed Dec 23 09:09:09 CST 2009
On Wed, Dec 23, 2009 at 08:31:36AM -0500, Christoph Hellwig wrote:
> On Mon, Dec 21, 2009 at 05:23:53PM -0600, Bill Kendall wrote:
> > xfsdump stores time_t as 32-bits in its dump and inventory
> > structures for portability/historical reasons. xfsinvutil
> > uses time_t directly, leading to some strange results on
> > systems which have a 64-bit time_t.
> >
> > The 32-bit time-related functions were factored out into
> > their own file since they are now used by xfsinvutil, and
> > their original file (util.c) could not easily be linked
> > with xfsinvutil due to dependencies on many other
> > dump/restore modules.
>
> The newly created timeutil.[ch] did not get included into the patch,
> so I can't easily review them, and the rest of the patch also seems
> whitespace mangled to me.
>
> The changes in it looks good, just the time_t to time32_t conversions
> plus overflow checks.
Reposting with timeutil.[ch] and whitespace fixups.
Signed-off-by: Bill Kendall <wkendall at sgi.com>
---
Index: xfsdump-kernel.org/common/Makefile
===================================================================
--- xfsdump-kernel.org.orig/common/Makefile
+++ xfsdump-kernel.org/common/Makefile
@@ -14,7 +14,7 @@ LSRCFILES = arch_xlate.c arch_xlate.h \
main.c media.c media.h media_rmvtape.h mlog.c mlog.h \
namreg.c namreg.h openutil.c openutil.h path.c path.h qlock.c qlock.h \
rec_hdr.h ring.c ring.h sproc.c sproc.h stream.c \
- stream.h ts_mtio.h types.h util.c util.h
+ stream.h timeutil.c timeutil.h ts_mtio.h types.h util.c util.h
default install install-dev :
Index: xfsdump-kernel.org/common/util.c
===================================================================
--- xfsdump-kernel.org.orig/common/util.c
+++ xfsdump-kernel.org/common/util.c
@@ -22,7 +22,6 @@
#include <sys/stat.h>
#include <sys/ioctl.h>
-#include <time.h>
#include <fcntl.h>
#include <errno.h>
#include <dirent.h>
@@ -508,25 +507,6 @@ diriter( jdm_fshandle_t *fshandlep,
}
}
-char *
-ctime32(const time32_t *timep)
-{
- time_t t = (time_t) *timep;
- return ctime(&t);
-}
-
-char *
-ctimennl( const time32_t *clockp )
-{
- char *p = ctime32( clockp );
-
- if ( p && strlen( p ) > 0 ) {
- p[ strlen( p ) - 1 ] = 0;
- }
-
- return p;
-}
-
int
cvtnum( int blocksize, char *s )
{
Index: xfsdump-kernel.org/common/util.h
===================================================================
--- xfsdump-kernel.org.orig/common/util.h
+++ xfsdump-kernel.org/common/util.h
@@ -146,17 +146,6 @@ extern intgen_t diriter( jdm_fshandle_t
size_t usrgdsz );
-
-/* ctimennl - ctime(3C) with newline removed
- */
-extern char *ctimennl( const time32_t *clockp );
-
-/* ctime32 - takes a time32_t instead of a time_t
- */
-extern char *ctime32( const time32_t *timep );
-
-
-
/* fold_t - a character string made to look like a "fold here"
*/
#define FOLD_LEN 79
Index: xfsdump-kernel.org/dump/Makefile
===================================================================
--- xfsdump-kernel.org.orig/dump/Makefile
+++ xfsdump-kernel.org/dump/Makefile
@@ -26,6 +26,7 @@ COMMINCL = \
qlock.h \
ring.h \
stream.h \
+ timeutil.h \
ts_mtio.h \
types.h \
util.h \
@@ -66,6 +67,7 @@ COMMON = \
path.c \
ring.c \
stream.c \
+ timeutil.c \
util.c \
sproc.c
Index: xfsdump-kernel.org/dump/content.c
===================================================================
--- xfsdump-kernel.org.orig/dump/content.c
+++ xfsdump-kernel.org/dump/content.c
@@ -42,6 +42,7 @@
#include "exit.h"
#include "types.h"
#include "path.h"
+#include "timeutil.h"
#include "util.h"
#include "lock.h"
#include "qlock.h"
Index: xfsdump-kernel.org/inventory/inv_stobj.c
===================================================================
--- xfsdump-kernel.org.orig/inventory/inv_stobj.c
+++ xfsdump-kernel.org/inventory/inv_stobj.c
@@ -28,7 +28,7 @@
#include <sys/mman.h>
#include "types.h"
-#include "util.h"
+#include "timeutil.h"
#include "mlog.h"
#include "inv_priv.h"
#include "arch_xlate.h"
Index: xfsdump-kernel.org/invutil/Makefile
===================================================================
--- xfsdump-kernel.org.orig/invutil/Makefile
+++ xfsdump-kernel.org/invutil/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/include/builddefs
COMMINCL = \
global.h \
mlog.h \
- util.h \
+ timeutil.h \
types.h
INVINCL = \
@@ -18,6 +18,9 @@ INVINCL = \
INVCOMMON = \
inv_files.c
+COMMON = \
+ timeutil.c
+
CURSESCOMMON = \
cmenu.c \
fstab.c \
Index: xfsdump-kernel.org/invutil/invidx.c
===================================================================
--- xfsdump-kernel.org.orig/invutil/invidx.c
+++ xfsdump-kernel.org/invutil/invidx.c
@@ -32,6 +32,7 @@
#include "list.h"
#include "invidx.h"
#include "stobj.h"
+#include "timeutil.h"
invidx_fileinfo_t *invidx_file;
int invidx_numfiles;
@@ -418,27 +419,6 @@ delete_stobj_entries(int fd, int deletep
}
int
-find_invidx_insert_point(int fd, time_t sh_time)
-{
- int i;
- invt_counter_t cnt;
- invt_entry_t tmpentry;
-
- lseek(fd, 0, SEEK_SET);
- read_n_bytes(fd, (char *)&cnt, sizeof(cnt), "invidx file");
-
- for(i = 0; i < cnt.ic_curnum; i++) {
- read_n_bytes(fd, (char *)&tmpentry, sizeof(tmpentry), "invidx file");
- if(tmpentry.ie_timeperiod.tp_start <= sh_time
- && tmpentry.ie_timeperiod.tp_end >= sh_time) {
- break;
- }
- }
-
- return i;
-}
-
-int
find_stobj_insert_point(int fd, invt_seshdr_t *hdr)
{
int i;
@@ -462,8 +442,8 @@ int
update_invidx_entry(int fd, char *filename, int stobj_fd)
{
int i;
- time_t start_time;
- time_t end_time;
+ time32_t start_time;
+ time32_t end_time;
invt_counter_t cnt;
invt_seshdr_t hdr;
invt_sescounter_t sescnt;
@@ -718,11 +698,11 @@ invidx_highlight(WINDOW *win, node_t *cu
snprintf(txt, sizeof(txt), "path: %s", invtentry->ie_filename);
put_info_line(1, txt);
- snprintf(txt, sizeof(txt), "start: %s", ctime((time_t*)&invtentry->ie_timeperiod.tp_start));
+ snprintf(txt, sizeof(txt), "start: %s", ctime32(&invtentry->ie_timeperiod.tp_start));
txt[strlen(txt) - 1] = '\0';
put_info_line(2, txt);
- snprintf(txt, sizeof(txt), "end: %s", ctime((time_t*)&invtentry->ie_timeperiod.tp_end));
+ snprintf(txt, sizeof(txt), "end: %s", ctime32(&invtentry->ie_timeperiod.tp_end));
txt[strlen(txt) - 1] = '\0';
put_info_line(3, txt);
@@ -757,7 +737,7 @@ invidx_undelete(WINDOW *win, node_t *cur
/*ARGSUSED*/
int
-invidx_prune(char *mountpt, uuid_t *uuidp, time_t prunetime, node_t *node, node_t *list)
+invidx_prune(char *mountpt, uuid_t *uuidp, time32_t prunetime, node_t *node, node_t *list)
{
data_t *d;
invt_entry_t *invidx_entry;
Index: xfsdump-kernel.org/invutil/invutil.c
===================================================================
--- xfsdump-kernel.org.orig/invutil/invutil.c
+++ xfsdump-kernel.org/invutil/invutil.c
@@ -29,6 +29,7 @@
#include "mlog.h"
#include "inv_priv.h"
#include "getopt.h"
+#include "timeutil.h"
#include "invutil.h"
char *g_programName;
@@ -43,7 +44,7 @@ bool_t redraw_options = BOOL_FALSE;
#ifndef HAVE_CURSES
int
-invutil_interactive(char *path, char *mountpt, uuid_t *uuidp, time_t timeSecs)
+invutil_interactive(char *path, char *mountpt, uuid_t *uuidp, time32_t timeSecs)
{
fprintf(stderr, "%s: libcurses support not compiled in, "
"interactive mode is unavailable.\n", g_programName);
@@ -161,13 +162,13 @@ main(int argc, char *argv[])
if (check_option) {
char *tempstr = "test";
- time_t temptime = 0;
+ time32_t temptime = 0;
CheckAndPruneFstab(inventory_path, BOOL_TRUE, tempstr, &uuid,
temptime, NULL);
}
else if (uuid_option || mntpnt_option) {
char *dateStr;
- time_t timeSecs;
+ time32_t timeSecs;
if (optind != (argc - 1) ) {
fprintf( stderr, "%s: Date missing for prune option\n",
@@ -189,7 +190,7 @@ main(int argc, char *argv[])
}
else if ( interactive_option ) {
char *dateStr;
- time_t timeSecs;
+ time32_t timeSecs;
if (optind != (argc - 1) ) {
timeSecs = 0;
@@ -237,11 +238,12 @@ mntpnt_equal(char *s1, char *s2)
}
-time_t
+time32_t
ParseDate(char *strDate)
{
struct tm tm;
time_t date = 0;
+ time32_t date32;
char **fmt;
char *templateStr[] = {
"%m/%d/%Y %I:%M:%S %p",
@@ -304,13 +306,21 @@ ParseDate(char *strDate)
date = mktime(&tm);
}
+ /* xfsdump inventory uses time32_t for portability.
+ * make sure the given date did not overflow... */
+ date32 = date;
+ if (date32 != date) {
+ fprintf(stderr, "%s: date out of range: \"%s\"\n", g_programName, strDate);
+ usage();
+ }
+
#ifdef INV_DEBUG
printf("INV_DEBUG: the date entered is %s\n", strDate);
printf("INV_DEBUG: the hour parsed from string is %d\n", tm.tm_hour);
- printf("INV_DEBUG: the date entered in secs is %ld\n", date);
+ printf("INV_DEBUG: the date entered in secs is %d\n", date32);
#endif /* INV_DEBUG */
- return date;
+ return date32;
}
char *
@@ -360,7 +370,7 @@ GetFstabFullPath(char *inv_path)
void
CheckAndPruneFstab(char *inv_path, bool_t checkonly, char *mountPt,
- uuid_t *uuidp, time_t prunetime, char *r_mf_label)
+ uuid_t *uuidp, time32_t prunetime, char *r_mf_label)
{
char *fstabname;
char *mapaddr;
@@ -502,7 +512,7 @@ CheckAndPruneFstab(char *inv_path, bool_
int
CheckAndPruneInvIndexFile( bool_t checkonly,
char *idxFileName,
- time_t prunetime,
+ time32_t prunetime,
char *r_mf_label)
{
char *temp;
@@ -544,8 +554,8 @@ CheckAndPruneInvIndexFile( bool_t checko
" %s\n", invIndexEntry[i].ie_filename);
if (debug) {
printf(" Time:\tbegin %s\t\tend %s",
- ctime((time_t *)&(invIndexEntry[i].ie_timeperiod.tp_start)),
- ctime((time_t *)&(invIndexEntry[i].ie_timeperiod.tp_end)));
+ ctime32(&(invIndexEntry[i].ie_timeperiod.tp_start)),
+ ctime32(&(invIndexEntry[i].ie_timeperiod.tp_end)));
}
if (( access( invIndexEntry[i].ie_filename, R_OK | W_OK ) == -1) &&
@@ -620,7 +630,7 @@ CheckAndPruneInvIndexFile( bool_t checko
int
CheckAndPruneStObjFile( bool_t checkonly,
char *StObjFileName,
- time_t prunetime,
+ time32_t prunetime,
char *r_mf_label)
{
char response[GEN_STRLEN];
@@ -672,7 +682,7 @@ CheckAndPruneStObjFile( bool_t checkonly
printf(" Session %d: %s %s",
sescount++,
StObjses->s_mountpt,
- ctime( (time_t *)&StObjhdr->sh_time ));
+ ctime32(&StObjhdr->sh_time));
}
if (debug) {
/* Note that the DMF people use some of this debug
@@ -693,7 +703,7 @@ CheckAndPruneStObjFile( bool_t checkonly
if (StObjhdr->sh_pruned)
printf(" Pruned Session: %s %s",
StObjses->s_mountpt,
- ctime( (time_t *)&StObjhdr->sh_time ));
+ ctime32(&StObjhdr->sh_time));
printf("\t\tdevice:\t\t%s\n", StObjses->s_devpath);
printf("\t\tsession label:\t\"%s\"\n", StObjses->s_label);
uuid_unparse( StObjses->s_sesid, str );
@@ -733,7 +743,7 @@ CheckAndPruneStObjFile( bool_t checkonly
}
#ifdef INV_DEBUG
- printf("INV_DEBUG: sh_time = %ld, prunetime = %ld\n",
+ printf("INV_DEBUG: sh_time = %d, prunetime = %d\n",
StObjhdr->sh_time, prunetime);
printf("INV_DEBUG: checkonly = %d, sh_pruned = %d\n",
checkonly, StObjhdr->sh_pruned);
@@ -755,7 +765,7 @@ CheckAndPruneStObjFile( bool_t checkonly
"LABEL\t\t:\t%s\n"
"TIME OF DUMP\t:\t%s",
str, StObjses->s_mountpt, StObjses->s_devpath,
- StObjses->s_label, ctime( (time_t *)&StObjhdr->sh_time ));
+ StObjses->s_label, ctime32(&StObjhdr->sh_time));
removeflag = BOOL_TRUE;
}
else {
@@ -764,7 +774,7 @@ CheckAndPruneStObjFile( bool_t checkonly
printf("UUID\t\t:\t%s\nMOUNT POINT\t:\t%s\n"
"DEV PATH\t:\t%s\nTIME OF DUMP\t:\t%s",
str, StObjses->s_mountpt, StObjses->s_devpath,
- ctime( (time_t *)&StObjhdr->sh_time ));
+ ctime32(&StObjhdr->sh_time));
while ( GotResponse == BOOL_FALSE )
{
char *chp;
Index: xfsdump-kernel.org/invutil/stobj.c
===================================================================
--- xfsdump-kernel.org.orig/invutil/stobj.c
+++ xfsdump-kernel.org/invutil/stobj.c
@@ -27,6 +27,7 @@
#include "getopt.h"
#include "invutil.h"
+#include "timeutil.h"
#include "cmenu.h"
#include "list.h"
#include "stobj.h"
@@ -184,7 +185,7 @@ stobjsess_highlight(WINDOW *win, node_t
snprintf(txt, sizeof(txt), "pruned: %s, flags: %#x, time: %s",
(stobjhdr->sh_pruned == BOOL_TRUE) ? "yes" : "no",
stobjhdr->sh_flag,
- ctime((time_t *)&(stobjhdr->sh_time)));
+ ctime32(&(stobjhdr->sh_time)));
txt[strlen(txt)-1] = '\0';
put_info_line(1, txt);
@@ -291,7 +292,7 @@ stobj_select(WINDOW *win, node_t *curren
/*ARGSUSED*/
int
-stobj_prune(char *mountpt, uuid_t *uuidp, time_t prunetime, node_t *node, node_t *list)
+stobj_prune(char *mountpt, uuid_t *uuidp, time32_t prunetime, node_t *node, node_t *list)
{
data_t *d;
stobjsess_t *stobj;
Index: xfsdump-kernel.org/restore/Makefile
===================================================================
--- xfsdump-kernel.org.orig/restore/Makefile
+++ xfsdump-kernel.org/restore/Makefile
@@ -27,6 +27,7 @@ COMMINCL = \
ring.h \
sproc.h \
stream.h \
+ timeutil.h \
ts_mtio.h \
types.h \
util.h
@@ -65,6 +66,7 @@ COMMON = \
ring.c \
sproc.c \
stream.c \
+ timeutil.c \
util.c
LOCALS = \
Index: xfsdump-kernel.org/restore/content.c
===================================================================
--- xfsdump-kernel.org.orig/restore/content.c
+++ xfsdump-kernel.org/restore/content.c
@@ -37,6 +37,7 @@
#include <malloc.h>
#include "types.h"
+#include "timeutil.h"
#include "util.h"
#include "cldmgr.h"
#include "qlock.h"
@@ -9347,7 +9348,6 @@ display_dump_label( bool_t lockpr,
char dump_string_uuid[UUID_STR_LEN + 1];
char media_string_uuid[UUID_STR_LEN + 1];
char fs_string_uuid[UUID_STR_LEN + 1];
- time_t gh_timestamp = (time_t)grhdrp->gh_timestamp;
ASSERT( scrhdrp->cih_level >= 0 );
ASSERT( scrhdrp->cih_level < 10 );
@@ -9376,7 +9376,7 @@ display_dump_label( bool_t lockpr,
crhdrp->ch_fsdevice );
mlog( mllevel | MLOG_NOLOCK,
_("session time: %s"),
- ctime_r( &gh_timestamp, dateline ));
+ ctime32_r( &grhdrp->gh_timestamp, dateline ));
mlog( mllevel | MLOG_NOLOCK,
_("level: %s%s\n"),
level_string,
Index: xfsdump-kernel.org/.gitignore
===================================================================
--- xfsdump-kernel.org.orig/.gitignore
+++ xfsdump-kernel.org/.gitignore
@@ -85,6 +85,7 @@ dump/rec_hdr.h
dump/ring.[ch]
dump/sproc.[ch]
dump/stream.[ch]
+dump/timeutil.[ch]
dump/ts_mtio.h
dump/types.h
dump/util.[ch]
@@ -94,6 +95,7 @@ invutil/inv_files.c
invutil/inv_priv.h
invutil/inventory.h
invutil/mlog.h
+invutil/timeutil.[ch]
invutil/types.h
invutil/util.h
@@ -131,6 +133,7 @@ restore/rec_hdr.h
restore/ring.[ch]
restore/sproc.[ch]
restore/stream.[ch]
+restore/timeutil.[ch]
restore/ts_mtio.h
restore/types.h
restore/util.[ch]
Index: xfsdump-kernel.org/invutil/cmenu.c
===================================================================
--- xfsdump-kernel.org.orig/invutil/cmenu.c
+++ xfsdump-kernel.org/invutil/cmenu.c
@@ -470,7 +470,7 @@ list_undelete(node_t *current, node_t *l
}
int
-list_prune(node_t *menulist, char *mountpt, uuid_t *uuidp, time_t prunetime)
+list_prune(node_t *menulist, char *mountpt, uuid_t *uuidp, time32_t prunetime)
{
node_t *n;
data_t *d;
@@ -565,7 +565,7 @@ create_windows()
}
int
-invutil_interactive(char *inv_path, char *mountpt, uuid_t *uuidp, time_t timeSecs)
+invutil_interactive(char *inv_path, char *mountpt, uuid_t *uuidp, time32_t timeSecs)
{
int keyc;
node_t *menulist;
Index: xfsdump-kernel.org/invutil/cmenu.h
===================================================================
--- xfsdump-kernel.org.orig/invutil/cmenu.h
+++ xfsdump-kernel.org/invutil/cmenu.h
@@ -55,7 +55,7 @@ typedef struct menu_ops_s {
int (* op_highlight ) (WINDOW *win, node_t *current, node_t *list);
int (* op_unhighlight ) (WINDOW *win, node_t *current, node_t *list);
int (* op_commit ) (WINDOW *win, node_t *current, node_t *list);
- int (* op_prune ) (char *mountpt, uuid_t *uuidp, time_t prunetime, node_t *node, node_t *list);
+ int (* op_prune ) (char *mountpt, uuid_t *uuidp, time32_t prunetime, node_t *node, node_t *list);
} menu_ops_t;
typedef struct {
Index: xfsdump-kernel.org/invutil/fstab.c
===================================================================
--- xfsdump-kernel.org.orig/invutil/fstab.c
+++ xfsdump-kernel.org/invutil/fstab.c
@@ -172,7 +172,7 @@ fstab_highlight(WINDOW *win, node_t *cur
/*ARGSUSED*/
int
-fstab_prune(char *mountpt, uuid_t *uuidp, time_t prunetime, node_t *node, node_t *list)
+fstab_prune(char *mountpt, uuid_t *uuidp, time32_t prunetime, node_t *node, node_t *list)
{
data_t *d;
invt_fstab_t *fstabentry;
Index: xfsdump-kernel.org/invutil/fstab.h
===================================================================
--- xfsdump-kernel.org.orig/invutil/fstab.h
+++ xfsdump-kernel.org/invutil/fstab.h
@@ -33,6 +33,6 @@ int find_matching_fstab(int fidx, invt_f
int fstab_select(WINDOW *win, node_t *current, node_t *list);
int fstab_highlight(WINDOW *win, node_t *current, node_t *list);
int fstab_commit(WINDOW *win, node_t *current, node_t *list);
-int fstab_prune(char *mountpt, uuid_t *uuidp, time_t prunetime, node_t *node, node_t *list);
+int fstab_prune(char *mountpt, uuid_t *uuidp, time32_t prunetime, node_t *node, node_t *list);
#endif /* FSTAB_H */
Index: xfsdump-kernel.org/invutil/invidx.h
===================================================================
--- xfsdump-kernel.org.orig/invutil/invidx.h
+++ xfsdump-kernel.org/invutil/invidx.h
@@ -33,7 +33,6 @@ void *remmap_invidx(int fidx, int num);
int find_matching_stobjfile(char *filename);
int find_matching_invidxfile(char *filename);
int find_overlapping_invidx(int fidx, invt_entry_t *inv_entry);
-int find_invidx_insert_point(int fd, time_t sh_time);
int find_invidx_insert_pos(int fidx, invt_entry_t *inv_entry);
char *get_inventry_stobjfile(data_t *d);
node_t *find_invidx_node(node_t *list, int inv_fileidx);
@@ -47,6 +46,6 @@ int invidx_undelete(WINDOW *win, node_t
int invidx_select(WINDOW *win, node_t *current, node_t *list);
int invidx_highlight(WINDOW *win, node_t *current, node_t *list);
int invidx_commit(WINDOW *win, node_t *current, node_t *list);
-int invidx_prune(char *mountpt, uuid_t *uuidp, time_t prunetime, node_t *node, node_t *list);
+int invidx_prune(char *mountpt, uuid_t *uuidp, time32_t prunetime, node_t *node, node_t *list);
#endif /* INVIDX_H */
Index: xfsdump-kernel.org/invutil/invutil.h
===================================================================
--- xfsdump-kernel.org.orig/invutil/invutil.h
+++ xfsdump-kernel.org/invutil/invutil.h
@@ -44,12 +44,12 @@ extern bool_t wait_for_locks;
char * GetFstabFullPath(char *);
char * GetNameOfInvIndex (char *, uuid_t);
char * GetNameOfStobj (char *inv_path, char *filename);
-void CheckAndPruneFstab(char *, bool_t, char *, uuid_t *, time_t, char *);
-int CheckAndPruneInvIndexFile( bool_t, char *, time_t, char *);
-int CheckAndPruneStObjFile( bool_t, char *, time_t, char *);
+void CheckAndPruneFstab(char *, bool_t, char *, uuid_t *, time32_t, char *);
+int CheckAndPruneInvIndexFile( bool_t, char *, time32_t, char *);
+int CheckAndPruneStObjFile( bool_t, char *, time32_t, char *);
int uses_specified_mf_label(
invt_seshdr_t *, invt_session_t *, char *, char *);
-time_t ParseDate(char *);
+time32_t ParseDate(char *);
void usage (void);
int open_and_lock(char *, Open_t, uint);
void read_n_bytes(int, void *, size_t, char *);
@@ -58,7 +58,7 @@ void * mmap_n_bytes(int, size_t, bool_t,
void ListFstab(void);
int ListInvIndexFile( char *);
int ListStObjFile(char *);
-int invutil_interactive(char *, char *, uuid_t *, time_t timeSecs);
+int invutil_interactive(char *, char *, uuid_t *, time32_t timeSecs);
int mntpnt_equal(char *s1, char *s2);
#endif /* INVUTIL_H */
Index: xfsdump-kernel.org/invutil/stobj.h
===================================================================
--- xfsdump-kernel.org.orig/invutil/stobj.h
+++ xfsdump-kernel.org/invutil/stobj.h
@@ -33,7 +33,7 @@ int stobjstrm_highlight(WINDOW *win, nod
int stobjmed_highlight(WINDOW *win, node_t *current, node_t *list);
int stobj_select(WINDOW *win, node_t *current, node_t *list);
int stobjsess_commit(WINDOW *win, node_t *current, node_t *list);
-int stobj_prune(char *mountpt, uuid_t *uuidp, time_t prunetime, node_t *node, node_t *list);
+int stobj_prune(char *mountpt, uuid_t *uuidp, time32_t prunetime, node_t *node, node_t *list);
int stobj_undelete(WINDOW *win, node_t *current, node_t *list);
int stobjmed_commit(WINDOW *win, node_t *current, node_t *list);
int stobjstrm_commit(WINDOW *win, node_t *current, node_t *list);
Index: xfsdump-kernel.org/common/timeutil.c
===================================================================
--- /dev/null
+++ xfsdump-kernel.org/common/timeutil.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2009 Silicon Graphics, Inc.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would 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 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <sys/types.h>
+#include <string.h>
+#include <time.h>
+
+#include "types.h"
+#include "timeutil.h"
+
+char *
+ctime32(const time32_t *timep)
+{
+ time_t t = (time_t) *timep;
+ return ctime(&t);
+}
+
+char *
+ctime32_r(const time32_t *timep, char *buf)
+{
+ time_t t = (time_t) *timep;
+ return ctime_r(&t, buf);
+}
+
+char *
+ctimennl( const time32_t *clockp )
+{
+ char *p = ctime32( clockp );
+
+ if ( p && strlen( p ) > 0 ) {
+ p[ strlen( p ) - 1 ] = 0;
+ }
+
+ return p;
+}
Index: xfsdump-kernel.org/common/timeutil.h
===================================================================
--- /dev/null
+++ xfsdump-kernel.org/common/timeutil.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2009 Silicon Graphics, Inc.
+ * All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it would 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 for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+#ifndef TIMEUTIL_H
+#define TIMEUTIL_H
+
+/* timeutil.[hc] - time32_t related functions
+ */
+
+
+/* ctime32 - takes a time32_t instead of a time_t
+ */
+extern char *ctime32( const time32_t *timep );
+
+/* ctime32_r - takes a time32_t instead of a time_t
+ */
+extern char *ctime32_r( const time32_t *timep, char *buf );
+
+/* ctimennl - ctime(3C) with newline removed
+ */
+extern char *ctimennl( const time32_t *clockp );
+
+#endif /* TIMEUTIL_H */
More information about the xfs
mailing list