From: Bill Kendall <wkendall@sgi.com>
To: Christoph Hellwig <hch@infradead.org>, xfs@oss.sgi.com
Subject: Re: [PATCH] use time32_t consistently in xfsdump tree
Date: Wed, 23 Dec 2009 11:41:45 -0600 [thread overview]
Message-ID: <20091223174143.GA31577@sgi.com> (raw)
In-Reply-To: <4B325018.4050708@sgi.com>
On Wed, Dec 23, 2009 at 11:15:04AM -0600, Bill Kendall wrote:
> However, while looking at this I noticed there's at least one case
> where we do printf("...", ctime(), ctime()). That's not going to
> work right -- the same value will be printed for both times. I'll
> have to repost again...
Fix the one case where printf is called with 2 arguments that
are calls to ctime32(). This occurs in CheckAndPruneInvIndexFile()
-- otherwise the patch is the same.
Signed-off-by: Bill Kendall <wkendall@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;
@@ -543,9 +553,10 @@ CheckAndPruneInvIndexFile( bool_t checko
printf(" Checking access for\n"
" %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)));
+ printf(" Time:\tbegin %s",
+ ctime32(&(invIndexEntry[i].ie_timeperiod.tp_start)));
+ printf("\t\tend %s",
+ ctime32(&(invIndexEntry[i].ie_timeperiod.tp_end)));
}
if (( access( invIndexEntry[i].ie_filename, R_OK | W_OK ) == -1) &&
@@ -620,7 +631,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 +683,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 +704,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 +744,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 +766,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 +775,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 */
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2009-12-23 17:41 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-21 23:23 [PATCH] use time32_t consistently in xfsdump tree Bill Kendall
2009-12-23 13:31 ` Christoph Hellwig
2009-12-23 15:09 ` Bill Kendall
2009-12-23 17:15 ` Bill Kendall
2009-12-23 17:41 ` Bill Kendall [this message]
2010-01-06 17:49 ` Christoph Hellwig
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20091223174143.GA31577@sgi.com \
--to=wkendall@sgi.com \
--cc=hch@infradead.org \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.