Some formatting updates (ran the code through indent)
-Erik
This commit is contained in:
		
							
								
								
									
										451
									
								
								date.c
									
									
									
									
									
								
							
							
						
						
									
										451
									
								
								date.c
									
									
									
									
									
								
							@@ -1,3 +1,4 @@
 | 
			
		||||
/* vi: set sw=4 ts=4: */
 | 
			
		||||
/*
 | 
			
		||||
 * Mini date implementation for busybox
 | 
			
		||||
 *
 | 
			
		||||
@@ -38,12 +39,13 @@
 | 
			
		||||
   an RFC 822 complient date output for shell scripting
 | 
			
		||||
   mail commands */
 | 
			
		||||
 | 
			
		||||
static const char	date_usage[] = "date [OPTION]... [+FORMAT]\n"
 | 
			
		||||
"  or:  date [OPTION] [MMDDhhmm[[CC]YY][.ss]]\n\n"
 | 
			
		||||
"Display the current time in the given FORMAT, or set the system date.\n"
 | 
			
		||||
"\nOptions:\n\t-R\t\toutput RFC-822 compliant date string\n"
 | 
			
		||||
"\t-s\t\tset time described by STRING\n"
 | 
			
		||||
"\t-u\t\tprint or set Coordinated Universal Time\n";
 | 
			
		||||
static const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
 | 
			
		||||
	"  or:  date [OPTION] [MMDDhhmm[[CC]YY][.ss]]\n\n"
 | 
			
		||||
	"Display the current time in the given FORMAT, or set the system date.\n"
 | 
			
		||||
	"\nOptions:\n\t-R\t\toutput RFC-822 compliant date string\n"
 | 
			
		||||
	"\t-s\t\tset time described by STRING\n"
 | 
			
		||||
 | 
			
		||||
	"\t-u\t\tprint or set Coordinated Universal Time\n";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Input parsing code is always bulky - used heavy duty libc stuff as
 | 
			
		||||
@@ -51,240 +53,233 @@ static const char	date_usage[] = "date [OPTION]... [+FORMAT]\n"
 | 
			
		||||
 | 
			
		||||
/* Default input handling to save suprising some people */
 | 
			
		||||
 | 
			
		||||
struct tm *
 | 
			
		||||
date_conv_time(struct tm *tm_time, const char *t_string) {
 | 
			
		||||
  int nr;
 | 
			
		||||
struct tm *date_conv_time(struct tm *tm_time, const char *t_string)
 | 
			
		||||
{
 | 
			
		||||
	int nr;
 | 
			
		||||
 | 
			
		||||
  nr = sscanf(t_string, "%2d%2d%2d%2d%d", 
 | 
			
		||||
	     &(tm_time->tm_mon),
 | 
			
		||||
	     &(tm_time->tm_mday),
 | 
			
		||||
	     &(tm_time->tm_hour),
 | 
			
		||||
	     &(tm_time->tm_min),
 | 
			
		||||
	     &(tm_time->tm_year));
 | 
			
		||||
	nr = sscanf(t_string, "%2d%2d%2d%2d%d",
 | 
			
		||||
				&(tm_time->tm_mon),
 | 
			
		||||
				&(tm_time->tm_mday),
 | 
			
		||||
				&(tm_time->tm_hour),
 | 
			
		||||
				&(tm_time->tm_min), &(tm_time->tm_year));
 | 
			
		||||
 | 
			
		||||
  if(nr < 4 || nr > 5) {
 | 
			
		||||
    fprintf(stderr, invalid_date, "date", t_string);
 | 
			
		||||
    exit( FALSE);
 | 
			
		||||
  }
 | 
			
		||||
	if (nr < 4 || nr > 5) {
 | 
			
		||||
		fprintf(stderr, invalid_date, "date", t_string);
 | 
			
		||||
		exit(FALSE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
  /* correct for century  - minor Y2K problem here? */
 | 
			
		||||
  if(tm_time->tm_year >= 1900)
 | 
			
		||||
    tm_time->tm_year -= 1900;
 | 
			
		||||
  /* adjust date */
 | 
			
		||||
  tm_time->tm_mon -= 1;
 | 
			
		||||
	     
 | 
			
		||||
  return(tm_time);
 | 
			
		||||
	/* correct for century  - minor Y2K problem here? */
 | 
			
		||||
	if (tm_time->tm_year >= 1900)
 | 
			
		||||
		tm_time->tm_year -= 1900;
 | 
			
		||||
	/* adjust date */
 | 
			
		||||
	tm_time->tm_mon -= 1;
 | 
			
		||||
 | 
			
		||||
	return (tm_time);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* The new stuff for LRP */
 | 
			
		||||
 | 
			
		||||
struct tm *
 | 
			
		||||
date_conv_ftime(struct tm *tm_time, const char *t_string) {
 | 
			
		||||
  struct tm itm_time, jtm_time, ktm_time, \
 | 
			
		||||
    ltm_time, mtm_time, ntm_time;
 | 
			
		||||
  
 | 
			
		||||
  itm_time = *tm_time;
 | 
			
		||||
  jtm_time = *tm_time;
 | 
			
		||||
  ktm_time = *tm_time;
 | 
			
		||||
  ltm_time = *tm_time;
 | 
			
		||||
  mtm_time = *tm_time;
 | 
			
		||||
  ntm_time = *tm_time;
 | 
			
		||||
 | 
			
		||||
  /* Parse input and assign appropriately to tm_time */
 | 
			
		||||
  
 | 
			
		||||
  if(sscanf(t_string, "%d:%d:%d",
 | 
			
		||||
	    &itm_time.tm_hour, 
 | 
			
		||||
	    &itm_time.tm_min, 
 | 
			
		||||
	    &itm_time.tm_sec) == 3 ) {
 | 
			
		||||
 | 
			
		||||
    *tm_time = itm_time;
 | 
			
		||||
    return(tm_time);
 | 
			
		||||
 | 
			
		||||
  } else if (sscanf(t_string, "%d:%d", 
 | 
			
		||||
		    &jtm_time.tm_hour, 
 | 
			
		||||
		    &jtm_time.tm_min) == 2) {
 | 
			
		||||
 | 
			
		||||
    *tm_time = jtm_time;
 | 
			
		||||
    return(tm_time);
 | 
			
		||||
 | 
			
		||||
  } else if (sscanf(t_string, "%d.%d-%d:%d:%d",
 | 
			
		||||
		    &ktm_time.tm_mon, 
 | 
			
		||||
		    &ktm_time.tm_mday, 
 | 
			
		||||
		    &ktm_time.tm_hour,
 | 
			
		||||
		    &ktm_time.tm_min,
 | 
			
		||||
		    &ktm_time.tm_sec) == 5) {
 | 
			
		||||
 | 
			
		||||
    ktm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
    *tm_time = ktm_time;
 | 
			
		||||
    return(tm_time);
 | 
			
		||||
 | 
			
		||||
  } else if (sscanf(t_string, "%d.%d-%d:%d",
 | 
			
		||||
		    <m_time.tm_mon, 
 | 
			
		||||
		    <m_time.tm_mday, 
 | 
			
		||||
		    <m_time.tm_hour,
 | 
			
		||||
		    <m_time.tm_min) == 4) {
 | 
			
		||||
 | 
			
		||||
    ltm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
    *tm_time = ltm_time;
 | 
			
		||||
    return(tm_time);
 | 
			
		||||
 | 
			
		||||
  } else if (sscanf(t_string, "%d.%d.%d-%d:%d:%d",
 | 
			
		||||
		    &mtm_time.tm_year,
 | 
			
		||||
		    &mtm_time.tm_mon, 
 | 
			
		||||
		    &mtm_time.tm_mday, 
 | 
			
		||||
		    &mtm_time.tm_hour,
 | 
			
		||||
		    &mtm_time.tm_min,
 | 
			
		||||
		    &mtm_time.tm_sec) == 6) {
 | 
			
		||||
 | 
			
		||||
    mtm_time.tm_year -= 1900; /* Adjust years */
 | 
			
		||||
    mtm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
    *tm_time = mtm_time;
 | 
			
		||||
    return(tm_time);
 | 
			
		||||
 | 
			
		||||
  } else if (sscanf(t_string, "%d.%d.%d-%d:%d",
 | 
			
		||||
		    &ntm_time.tm_year,
 | 
			
		||||
		    &ntm_time.tm_mon, 
 | 
			
		||||
		    &ntm_time.tm_mday, 
 | 
			
		||||
		    &ntm_time.tm_hour,
 | 
			
		||||
		    &ntm_time.tm_min) == 5) { 
 | 
			
		||||
    ntm_time.tm_year -= 1900; /* Adjust years */
 | 
			
		||||
    ntm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
    *tm_time = ntm_time;
 | 
			
		||||
    return(tm_time);
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  fprintf(stderr, invalid_date, "date", t_string);
 | 
			
		||||
 | 
			
		||||
  exit( FALSE);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
date_main(int argc, char * * argv)
 | 
			
		||||
struct tm *date_conv_ftime(struct tm *tm_time, const char *t_string)
 | 
			
		||||
{
 | 
			
		||||
  char *date_str = NULL;
 | 
			
		||||
  char *date_fmt = NULL;
 | 
			
		||||
  char *t_buff;
 | 
			
		||||
  int i;
 | 
			
		||||
  int set_time = 0;
 | 
			
		||||
  int rfc822 = 0;
 | 
			
		||||
  int utc = 0;
 | 
			
		||||
  int use_arg = 0;
 | 
			
		||||
  time_t tm; 
 | 
			
		||||
  struct tm tm_time;
 | 
			
		||||
  
 | 
			
		||||
  /* Interpret command line args */
 | 
			
		||||
    i = --argc;
 | 
			
		||||
    argv++;
 | 
			
		||||
    while (i > 0 && **argv) {
 | 
			
		||||
	if (**argv == '-') {
 | 
			
		||||
	    while (i>0 && *++(*argv)) switch (**argv) {
 | 
			
		||||
	    case 'R':
 | 
			
		||||
		rfc822 = 1;
 | 
			
		||||
		break;
 | 
			
		||||
	    case 's':
 | 
			
		||||
		set_time = 1;
 | 
			
		||||
		if(date_str != NULL) usage ( date_usage);
 | 
			
		||||
		date_str = optarg;
 | 
			
		||||
		break;
 | 
			
		||||
	    case 'u':
 | 
			
		||||
		utc = 1;
 | 
			
		||||
		if (putenv ("TZ=UTC0") != 0) {
 | 
			
		||||
		    fprintf(stderr, memory_exhausted, "date");
 | 
			
		||||
		    exit( FALSE);
 | 
			
		||||
		}
 | 
			
		||||
		/* Look ma, no break.  Don't fix it either. */
 | 
			
		||||
	    case 'd':
 | 
			
		||||
		use_arg = 1;
 | 
			
		||||
		if(date_str != NULL) usage ( date_usage);
 | 
			
		||||
		date_str = optarg;
 | 
			
		||||
		break;
 | 
			
		||||
	    case '-':
 | 
			
		||||
		usage ( date_usage);
 | 
			
		||||
	    }
 | 
			
		||||
	} else {
 | 
			
		||||
	    if ( (date_fmt == NULL) && (strcmp(*argv, "+")==0) )
 | 
			
		||||
		date_fmt=*argv;
 | 
			
		||||
	    else if (date_str == NULL) {
 | 
			
		||||
		set_time = 1;
 | 
			
		||||
		date_str=*argv;
 | 
			
		||||
	    } else { 
 | 
			
		||||
		usage ( date_usage);
 | 
			
		||||
	    }
 | 
			
		||||
	struct tm itm_time, jtm_time, ktm_time, ltm_time, mtm_time, ntm_time;
 | 
			
		||||
 | 
			
		||||
	itm_time = *tm_time;
 | 
			
		||||
	jtm_time = *tm_time;
 | 
			
		||||
	ktm_time = *tm_time;
 | 
			
		||||
	ltm_time = *tm_time;
 | 
			
		||||
	mtm_time = *tm_time;
 | 
			
		||||
	ntm_time = *tm_time;
 | 
			
		||||
 | 
			
		||||
	/* Parse input and assign appropriately to tm_time */
 | 
			
		||||
 | 
			
		||||
	if (sscanf(t_string, "%d:%d:%d",
 | 
			
		||||
			   &itm_time.tm_hour, &itm_time.tm_min, &itm_time.tm_sec) == 3) {
 | 
			
		||||
 | 
			
		||||
		*tm_time = itm_time;
 | 
			
		||||
		return (tm_time);
 | 
			
		||||
 | 
			
		||||
	} else if (sscanf(t_string, "%d:%d",
 | 
			
		||||
					  &jtm_time.tm_hour, &jtm_time.tm_min) == 2) {
 | 
			
		||||
 | 
			
		||||
		*tm_time = jtm_time;
 | 
			
		||||
		return (tm_time);
 | 
			
		||||
 | 
			
		||||
	} else if (sscanf(t_string, "%d.%d-%d:%d:%d",
 | 
			
		||||
					  &ktm_time.tm_mon,
 | 
			
		||||
					  &ktm_time.tm_mday,
 | 
			
		||||
					  &ktm_time.tm_hour,
 | 
			
		||||
					  &ktm_time.tm_min, &ktm_time.tm_sec) == 5) {
 | 
			
		||||
 | 
			
		||||
		ktm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
		*tm_time = ktm_time;
 | 
			
		||||
		return (tm_time);
 | 
			
		||||
 | 
			
		||||
	} else if (sscanf(t_string, "%d.%d-%d:%d",
 | 
			
		||||
					  <m_time.tm_mon,
 | 
			
		||||
					  <m_time.tm_mday,
 | 
			
		||||
					  <m_time.tm_hour, <m_time.tm_min) == 4) {
 | 
			
		||||
 | 
			
		||||
		ltm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
		*tm_time = ltm_time;
 | 
			
		||||
		return (tm_time);
 | 
			
		||||
 | 
			
		||||
	} else if (sscanf(t_string, "%d.%d.%d-%d:%d:%d",
 | 
			
		||||
					  &mtm_time.tm_year,
 | 
			
		||||
					  &mtm_time.tm_mon,
 | 
			
		||||
					  &mtm_time.tm_mday,
 | 
			
		||||
					  &mtm_time.tm_hour,
 | 
			
		||||
					  &mtm_time.tm_min, &mtm_time.tm_sec) == 6) {
 | 
			
		||||
 | 
			
		||||
		mtm_time.tm_year -= 1900;	/* Adjust years */
 | 
			
		||||
		mtm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
		*tm_time = mtm_time;
 | 
			
		||||
		return (tm_time);
 | 
			
		||||
 | 
			
		||||
	} else if (sscanf(t_string, "%d.%d.%d-%d:%d",
 | 
			
		||||
					  &ntm_time.tm_year,
 | 
			
		||||
					  &ntm_time.tm_mon,
 | 
			
		||||
					  &ntm_time.tm_mday,
 | 
			
		||||
					  &ntm_time.tm_hour, &ntm_time.tm_min) == 5) {
 | 
			
		||||
		ntm_time.tm_year -= 1900;	/* Adjust years */
 | 
			
		||||
		ntm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
 | 
			
		||||
		*tm_time = ntm_time;
 | 
			
		||||
		return (tm_time);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	i--;
 | 
			
		||||
	argv++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	fprintf(stderr, invalid_date, "date", t_string);
 | 
			
		||||
 | 
			
		||||
  /* Now we have parsed all the information except the date format
 | 
			
		||||
   which depends on whether the clock is being set or read */
 | 
			
		||||
 | 
			
		||||
  time(&tm);
 | 
			
		||||
  memcpy(&tm_time, localtime(&tm), sizeof(tm_time));
 | 
			
		||||
  /* Zero out fields - take her back to midnight!*/
 | 
			
		||||
  if(date_str != NULL) {
 | 
			
		||||
    tm_time.tm_sec = 0;
 | 
			
		||||
    tm_time.tm_min = 0;
 | 
			
		||||
    tm_time.tm_hour = 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Process any date input to UNIX time since 1 Jan 1970 */
 | 
			
		||||
  if(date_str != NULL) {
 | 
			
		||||
 | 
			
		||||
    if(strchr(date_str, ':') != NULL) {
 | 
			
		||||
      date_conv_ftime(&tm_time, date_str);
 | 
			
		||||
    } else {
 | 
			
		||||
      date_conv_time(&tm_time, date_str);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Correct any day of week and day of year etc fields */
 | 
			
		||||
    tm = mktime(&tm_time);
 | 
			
		||||
    if (tm < 0 ) {
 | 
			
		||||
      fprintf(stderr, invalid_date, "date", date_str);
 | 
			
		||||
      exit( FALSE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* if setting time, set it */
 | 
			
		||||
    if(set_time) {
 | 
			
		||||
      if( stime(&tm) < 0) {
 | 
			
		||||
	fprintf(stderr, "date: can't set date.\n");
 | 
			
		||||
	exit( FALSE);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Display output */
 | 
			
		||||
 | 
			
		||||
  /* Deal with format string */
 | 
			
		||||
  if(date_fmt == NULL) {
 | 
			
		||||
    date_fmt = (rfc822
 | 
			
		||||
                ? (utc
 | 
			
		||||
                   ? "%a, %_d %b %Y %H:%M:%S GMT"
 | 
			
		||||
                   : "%a, %_d %b %Y %H:%M:%S %z")
 | 
			
		||||
                : "%a %b %e %H:%M:%S %Z %Y");
 | 
			
		||||
 | 
			
		||||
  } else if ( *date_fmt == '\0' ) {
 | 
			
		||||
    /* Imitate what GNU 'date' does with NO format string! */
 | 
			
		||||
    printf ("\n");
 | 
			
		||||
    exit( TRUE);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Handle special conversions */
 | 
			
		||||
 | 
			
		||||
  if( strncmp( date_fmt, "%f", 2) == 0 ) {
 | 
			
		||||
    date_fmt = "%Y.%m.%d-%H:%M:%S";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Print OUTPUT (after ALL that!) */
 | 
			
		||||
  t_buff = malloc(201);
 | 
			
		||||
  strftime(t_buff, 200, date_fmt, &tm_time);
 | 
			
		||||
  printf("%s\n", t_buff);
 | 
			
		||||
 | 
			
		||||
  exit( TRUE);
 | 
			
		||||
	exit(FALSE);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int date_main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	char *date_str = NULL;
 | 
			
		||||
	char *date_fmt = NULL;
 | 
			
		||||
	char *t_buff;
 | 
			
		||||
	int i;
 | 
			
		||||
	int set_time = 0;
 | 
			
		||||
	int rfc822 = 0;
 | 
			
		||||
	int utc = 0;
 | 
			
		||||
	int use_arg = 0;
 | 
			
		||||
	time_t tm;
 | 
			
		||||
	struct tm tm_time;
 | 
			
		||||
 | 
			
		||||
	/* Interpret command line args */
 | 
			
		||||
	i = --argc;
 | 
			
		||||
	argv++;
 | 
			
		||||
	while (i > 0 && **argv) {
 | 
			
		||||
		if (**argv == '-') {
 | 
			
		||||
			while (i > 0 && *++(*argv))
 | 
			
		||||
				switch (**argv) {
 | 
			
		||||
				case 'R':
 | 
			
		||||
					rfc822 = 1;
 | 
			
		||||
					break;
 | 
			
		||||
				case 's':
 | 
			
		||||
					set_time = 1;
 | 
			
		||||
					if (date_str != NULL)
 | 
			
		||||
						usage(date_usage);
 | 
			
		||||
					date_str = optarg;
 | 
			
		||||
					break;
 | 
			
		||||
				case 'u':
 | 
			
		||||
					utc = 1;
 | 
			
		||||
					if (putenv("TZ=UTC0") != 0) {
 | 
			
		||||
						fprintf(stderr, memory_exhausted, "date");
 | 
			
		||||
						exit(FALSE);
 | 
			
		||||
					}
 | 
			
		||||
					/* Look ma, no break.  Don't fix it either. */
 | 
			
		||||
				case 'd':
 | 
			
		||||
					use_arg = 1;
 | 
			
		||||
					if (date_str != NULL)
 | 
			
		||||
						usage(date_usage);
 | 
			
		||||
					date_str = optarg;
 | 
			
		||||
					break;
 | 
			
		||||
				case '-':
 | 
			
		||||
					usage(date_usage);
 | 
			
		||||
				}
 | 
			
		||||
		} else {
 | 
			
		||||
			if ((date_fmt == NULL) && (strcmp(*argv, "+") == 0))
 | 
			
		||||
				date_fmt = *argv;
 | 
			
		||||
			else if (date_str == NULL) {
 | 
			
		||||
				set_time = 1;
 | 
			
		||||
				date_str = *argv;
 | 
			
		||||
			} else {
 | 
			
		||||
				usage(date_usage);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		i--;
 | 
			
		||||
		argv++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/* Now we have parsed all the information except the date format
 | 
			
		||||
	   which depends on whether the clock is being set or read */
 | 
			
		||||
 | 
			
		||||
	time(&tm);
 | 
			
		||||
	memcpy(&tm_time, localtime(&tm), sizeof(tm_time));
 | 
			
		||||
	/* Zero out fields - take her back to midnight! */
 | 
			
		||||
	if (date_str != NULL) {
 | 
			
		||||
		tm_time.tm_sec = 0;
 | 
			
		||||
		tm_time.tm_min = 0;
 | 
			
		||||
		tm_time.tm_hour = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Process any date input to UNIX time since 1 Jan 1970 */
 | 
			
		||||
	if (date_str != NULL) {
 | 
			
		||||
 | 
			
		||||
		if (strchr(date_str, ':') != NULL) {
 | 
			
		||||
			date_conv_ftime(&tm_time, date_str);
 | 
			
		||||
		} else {
 | 
			
		||||
			date_conv_time(&tm_time, date_str);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Correct any day of week and day of year etc fields */
 | 
			
		||||
		tm = mktime(&tm_time);
 | 
			
		||||
		if (tm < 0) {
 | 
			
		||||
			fprintf(stderr, invalid_date, "date", date_str);
 | 
			
		||||
			exit(FALSE);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* if setting time, set it */
 | 
			
		||||
		if (set_time) {
 | 
			
		||||
			if (stime(&tm) < 0) {
 | 
			
		||||
				fprintf(stderr, "date: can't set date.\n");
 | 
			
		||||
				exit(FALSE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Display output */
 | 
			
		||||
 | 
			
		||||
	/* Deal with format string */
 | 
			
		||||
	if (date_fmt == NULL) {
 | 
			
		||||
		date_fmt = (rfc822
 | 
			
		||||
					? (utc
 | 
			
		||||
					   ? "%a, %_d %b %Y %H:%M:%S GMT"
 | 
			
		||||
					   : "%a, %_d %b %Y %H:%M:%S %z")
 | 
			
		||||
					: "%a %b %e %H:%M:%S %Z %Y");
 | 
			
		||||
 | 
			
		||||
	} else if (*date_fmt == '\0') {
 | 
			
		||||
		/* Imitate what GNU 'date' does with NO format string! */
 | 
			
		||||
		printf("\n");
 | 
			
		||||
		exit(TRUE);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Handle special conversions */
 | 
			
		||||
 | 
			
		||||
	if (strncmp(date_fmt, "%f", 2) == 0) {
 | 
			
		||||
		date_fmt = "%Y.%m.%d-%H:%M:%S";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Print OUTPUT (after ALL that!) */
 | 
			
		||||
	t_buff = malloc(201);
 | 
			
		||||
	strftime(t_buff, 200, date_fmt, &tm_time);
 | 
			
		||||
	printf("%s\n", t_buff);
 | 
			
		||||
 | 
			
		||||
	exit(TRUE);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user