X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=dump%2Fitime.c;h=6f59a8502979bdd48993cc8188419265068bf03d;hb=008af4194627f2026f9a66f38953724c0c364c81;hp=204fc58fdeb5f5a22e76f71a621757989f412ffa;hpb=5d2a3d246d400d45dfd4c49ddb588c69fb60873d;p=dump.git diff --git a/dump/itime.c b/dump/itime.c index 204fc58..6f59a85 100644 --- a/dump/itime.c +++ b/dump/itime.c @@ -18,11 +18,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -41,7 +37,7 @@ #ifndef lint static const char rcsid[] = - "$Id: itime.c,v 1.22 2002/01/25 15:08:59 stelian Exp $"; + "$Id: itime.c,v 1.25 2003/03/30 15:40:36 stelian Exp $"; #endif /* not lint */ #include @@ -56,6 +52,7 @@ static const char rcsid[] = #include #include #include +#include #ifdef __linux__ #ifdef HAVE_EXT2FS_EXT2_FS_H #include @@ -94,6 +91,7 @@ void initdumptimes(int createdumpdates) { FILE *df; + struct flock lock; if ((df = fopen(dumpdates, "r")) == NULL) { if (errno != ENOENT) { @@ -122,7 +120,11 @@ initdumptimes(int createdumpdates) msg("WARNING: no file `%s'\n", dumpdates); } if (df != NULL) { - (void) flock(fileno(df), LOCK_SH); + memset(&lock, 0, sizeof(lock)); + lock.l_type = F_RDLCK; + if (fcntl(fileno(df), F_SETLKW, &lock) < 0) + quit("cannot set read lock on %s: %s\n", + dumpdates, strerror(errno)); readdumptimes(df); (void) fclose(df); } @@ -200,13 +202,17 @@ putdumptime(void) struct dumpdates *dtwalk; int i; int fd; + struct flock lock; if(uflag == 0) return; if ((df = fopen(dumpdates, "r+")) == NULL) quit("cannot rewrite %s: %s\n", dumpdates, strerror(errno)); fd = fileno(df); - (void) flock(fd, LOCK_EX); + memset(&lock, 0, sizeof(lock)); + lock.l_type = F_WRLCK; + if (fcntl(fd, F_SETLKW, &lock) < 0) + quit("cannot set write lock on %s: %s\n", dumpdates, strerror(errno)); free((char *)ddatev); ddatev = 0; nddates = 0; @@ -249,11 +255,21 @@ putdumptime(void) static void dumprecout(FILE *file, struct dumpdates *what) { + char buf[26]; + struct tm *tms; - if (fprintf(file, "%s %c %s", + tms = localtime(&what->dd_ddate); + strncpy(buf, asctime(tms), sizeof(buf)); + if (buf[24] != '\n' || buf[25] != '\0') + quit("asctime returned an unexpected string\n"); + buf[24] = 0; + if (fprintf(file, "%s %c %s %c%2.2d%2.2d\n", what->dd_name, what->dd_level, - ctime(&what->dd_ddate)) < 0) + buf, + (tms->tm_gmtoff < 0 ? '-' : '+'), + abs(tms->tm_gmtoff) / 3600, + abs(tms->tm_gmtoff) % 3600 / 60) < 0) quit("%s: %s\n", dumpdates, strerror(errno)); }