Marcela Mašláňová 8dcad9
--- at-3.1.10/at.c.t_option	2007-07-04 11:12:10.000000000 +0200
Marcela Mašláňová 8dcad9
+++ at-3.1.10/at.c	2007-07-04 11:13:19.000000000 +0200
Marcela Mašláňová e64336
@@ -396,8 +396,9 @@
Marcela Mašláňová e64336
 	    unsigned int i;
Marcela Mašláňová e64336
 	    for (i = 0; i < sizeof(no_export) / sizeof(no_export[0]); i++) {
Marcela Mašláňová e64336
 		export = export
Marcela Mašláňová e64336
-		    && (strncmp(*atenv, no_export[i],
Marcela Mašláňová e64336
-				(size_t) (eqp - *atenv)) != 0);
Marcela Mašláňová e64336
+	    	    && (  (((size_t) (eqp - *atenv)) != strlen(no_export[i]))
Marcela Mašláňová e64336
+			||(strncmp(*atenv, no_export[i],(size_t) (eqp - *atenv)) != 0)
Marcela Mašláňová e64336
+                );
Marcela Mašláňová e64336
 	    }
Marcela Mašláňová e64336
 	    eqp++;
Marcela Mašláňová e64336
 	}
Marcela Mašláňová e64336
@@ -752,6 +753,102 @@
Marcela Mašláňová bf7489
     return p;
Marcela Mašláňová bf7489
 }
Marcela Mašláňová bf7489
 
Marcela Mašláňová bf7489
+/* Handle POSIX.2 '-t' option :
Marcela Mašláňová bf7489
+ *  Parses time string in "touch(1)" format:
Marcela Mašláňová bf7489
+ *       [[CC]YY]MMDDhhmm[.ss]
Marcela Mašláňová bf7489
+ *  and returns time_t .
Marcela Mašláňová bf7489
+ */
Marcela Mašláňová bf7489
+time_t
Marcela Mašláňová bf7489
+t_option(char *s)
Marcela Mašláňová bf7489
+{
Marcela Mašláňová bf7489
+        time_t t=time(0L);
Marcela Mašláňová bf7489
+        struct tm tm, tm_now=*localtime(&t);
Marcela Mašláňová bf7489
+        int l;
Marcela Mašláňová bf7489
+    
Marcela Mašláňová bf7489
+        if((s == 0L) || (*s == '\0'))
Marcela Mašláňová bf7489
+        {
Marcela Mašláňová bf7489
+	       return 0L;
Marcela Mašláňová bf7489
+	    };
Marcela Mašláňová bf7489
+	    memset(&tm,'\0',sizeof(tm));
Marcela Mašláňová bf7489
+	    l = strnlen(s,15);
Marcela Mašláňová bf7489
+	    switch(l)
Marcela Mašláňová bf7489
+	    {
Marcela Mašláňová bf7489
+	        case 15:
Marcela Mašláňová bf7489
+	           /* CCYYMMDDhhmm.ss */
Marcela Mašláňová bf7489
+	           sscanf(s, "%4d%2d%2d%2d%2d.%2d",
Marcela Mašláňová bf7489
+	                  &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec
Marcela Mašláňová bf7489
+	                 );
Marcela Mašláňová bf7489
+	           if(tm.tm_year)
Marcela Mašláňová bf7489
+	               tm.tm_year -= 1900 ;
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	           break;
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	        case 13:
Marcela Mašláňová bf7489
+	           /* YYMMDDhhmm.ss */
Marcela Mašláňová bf7489
+	           sscanf(s, "%2d%2d%2d%2d%2d.%2d",
Marcela Mašláňová bf7489
+	                  &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec
Marcela Mašláňová bf7489
+	                 );
Marcela Mašláňová bf7489
+	           if(tm.tm_year)
Marcela Mašláňová bf7489
+	               tm.tm_year += 100 ; /* Y2.1K+ bug! */
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	           break;
Marcela Mašláňová bf7489
+	    	    
Marcela Mašláňová bf7489
+	        case 11:
Marcela Mašláňová bf7489
+	           /* MMDDhhmm.ss */
Marcela Mašláňová bf7489
+	           sscanf(s, "%2d%2d%2d%2d.%2d",
Marcela Mašláňová bf7489
+	                  &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec
Marcela Mašláňová bf7489
+	                 );
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	           tm.tm_year = tm_now.tm_year;
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	           if(tm.tm_mon)
Marcela Mašláňová bf7489
+	               tm.tm_mon -= 1;
Marcela Mašláňová bf7489
+	           break;
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	        case 12:
Marcela Mašláňová bf7489
+	           /* CCYYMMDDhhmm */
Marcela Mašláňová bf7489
+	           sscanf(s, "%4d%2d%2d%2d%2d",
Marcela Mašláňová bf7489
+	                  &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min
Marcela Mašláňová bf7489
+	                 );
Marcela Mašláňová bf7489
+	           if(tm.tm_year)
Marcela Mašláňová bf7489
+	               tm.tm_year -= 1900 ;
Marcela Mašláňová bf7489
+	           break;
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	        case 10:
Marcela Mašláňová bf7489
+	           /* YYMMDDhhmm */
Marcela Mašláňová bf7489
+	           sscanf(s, "%2d%2d%2d%2d%2d",
Marcela Mašláňová bf7489
+	                  &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min
Marcela Mašláňová bf7489
+	                 );
Marcela Mašláňová bf7489
+	           if(tm.tm_year)
Marcela Mašláňová bf7489
+	               tm.tm_year += 100 ; /* Y2.1K+ bug! */
Marcela Mašláňová bf7489
+	           break;
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	        case  8:
Marcela Mašláňová bf7489
+	           /* MMDDhhmm */
Marcela Mašláňová bf7489
+	           sscanf(s, "%2d%2d%2d%2d",
Marcela Mašláňová bf7489
+	                  &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min
Marcela Mašláňová bf7489
+	                 );
Marcela Mašláňová bf7489
+	           if( tm.tm_mday )
Marcela Mašláňová bf7489
+	               tm.tm_year = tm_now.tm_year;
Marcela Mašláňová bf7489
+	           break;
Marcela Mašláňová bf7489
+	        default:
Marcela Mašláňová bf7489
+	           break;
Marcela Mašláňová bf7489
+	        }
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	        if( tm.tm_mon )
Marcela Mašláňová bf7489
+	           tm.tm_mon -= 1;
Marcela Mašláňová bf7489
+	    
Marcela Mašláňová bf7489
+	        if( tm.tm_mday )
Marcela Mašláňová bf7489
+	        {
Marcela Mašláňová e64336
+		       tm.tm_isdst = -1;
Marcela Mašláňová e64336
+		       t = mktime(&tm;;
Marcela Mašláňová e64336
+		       return t;
Marcela Mašláňová bf7489
+		} else
Marcela Mašláňová bf7489
+		       return 0L;
Marcela Mašláňová bf7489
+}
Marcela Mašláňová bf7489
+		
Marcela Mašláňová bf7489
+
Marcela Mašláňová bf7489
+
Marcela Mašláňová bf7489
 int
Marcela Mašláňová bf7489
 main(int argc, char **argv)
Marcela Mašláňová bf7489
 {
Marcela Mašláňová e64336
@@ -761,9 +858,9 @@
Marcela Mašláňová e64336
     char *pgm;
Marcela Mašláňová e64336
 
Marcela Mašláňová e64336
     int program = AT;		/* our default program */
Marcela Mašláňová e64336
-    char *options = "q:f:MmvldhVc";	/* default options for at */
Marcela Mašláňová e64336
+    char *options = "q:f:MmvldhVct:";	/* default options for at */
Marcela Mašláňová e64336
     int disp_version = 0;
Marcela Mašláňová e64336
-    time_t timer;
Marcela Mašláňová e64336
+    time_t timer=0L;
Marcela Mašláňová e64336
     struct passwd *pwe;
Marcela Mašláňová e64336
     struct group *ge;
Marcela Mašláňová e64336
 
Marcela Mašláňová e64336
@@ -866,7 +963,9 @@
Marcela Mašláňová e64336
 	    program = CAT;
Marcela Mašláňová e64336
 	    options = "";
Marcela Mašláňová e64336
 	    break;
Marcela Mašláňová e64336
-
Marcela Mašláňová e64336
+	case 't':
Marcela Mašláňová e64336
+	    timer = t_option(optarg);
Marcela Mašláňová e64336
+	    break;
Marcela Mašláňová e64336
 	default:
Marcela Mašláňová e64336
 	    usage();
Marcela Mašláňová e64336
 	    break;
Marcela Mašláňová 8dcad9
@@ -923,10 +1022,12 @@
Marcela Mašláňová 8dcad9
 	break;
Marcela Mašláňová 8dcad9
 
Marcela Mašláňová 8dcad9
     case AT:
Marcela Mašláňová 8dcad9
-	if (argc > optind) {
Marcela Mašláňová 8dcad9
-	    timer = parsetime(argc - optind, argv + optind);
Marcela Mašláňová 8dcad9
-	} else {
Marcela Mašláňová 8dcad9
-	    timer = 0;
Marcela Mašláňová 8dcad9
+	if (timer == 0) {
Marcela Mašláňová 8dcad9
+	      if (argc > optind) {
Marcela Mašláňová 8dcad9
+	          timer = parsetime(argc - optind, argv + optind);
Marcela Mašláňová 8dcad9
+	       } else {
Marcela Mašláňová 8dcad9
+	          timer = 0;
Marcela Mašláňová 8dcad9
+               }
Marcela Mašláňová 8dcad9
 	}
Marcela Mašláňová 8dcad9
 
Marcela Mašláňová 8dcad9
 	if (timer == 0) {
Marcela Mašláňová 8dcad9
@@ -955,10 +1056,12 @@
Marcela Mašláňová e64336
 	else
Marcela Mašláňová e64336
 	    queue = DEFAULT_BATCH_QUEUE;
Marcela Mašláňová e64336
 
Marcela Mašláňová e64336
-	if (argc > optind)
Marcela Mašláňová e64336
-	    timer = parsetime(argc, argv);
Marcela Mašláňová e64336
-	else
Marcela Mašláňová e64336
-	    timer = time(NULL);
Marcela Mašláňová e64336
+	if( timer == 0L )  {
Marcela Mašláňová e64336
+	  if (argc > optind)
Marcela Mašláňová e64336
+            timer = parsetime(argc, argv);
Marcela Mašláňová e64336
+            else
Marcela Mašláňová e64336
+          timer = time(NULL);
Marcela Mašláňová e64336
+        }
Marcela Mašláňová e64336
 
Marcela Mašláňová e64336
 	if (atverify) {
Marcela Mašláňová e64336
 	    struct tm *tm = localtime(&timer;;
Marcela Mašláňová 8dcad9
--- at-3.1.10/at.1.in.t_option	2007-07-04 11:12:10.000000000 +0200
Marcela Mašláňová 8dcad9
+++ at-3.1.10/at.1.in	2007-07-04 11:12:10.000000000 +0200
Marcela Mašláňová e64336
@@ -12,6 +12,16 @@
Marcela Mašláňová e64336
 .RB [ -mldbv ]
Marcela Mašláňová e64336
 .B TIME
Marcela Mašláňová e64336
 .br
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+.RB [ -V ]
Marcela Mašláňová e64336
+.RB [ -q
Marcela Mašláňová e64336
+.IR queue ]
Marcela Mašláňová e64336
+.RB [ -f
Marcela Mašláňová e64336
+.IR file ]
Marcela Mašláňová e64336
+.RB [ -mldbv ]
Marcela Mašláňová e64336
+.RB -t
Marcela Mašláňová e64336
+.IR time_arg
Marcela Mašláňová e64336
+.br
Marcela Mašláňová e64336
 .B "at -c"
Marcela Mašláňová e64336
 .I job
Marcela Mašláňová e64336
 .RI [ job... ]
Marcela Mašláňová e64336
@@ -32,8 +42,7 @@
Marcela Mašláňová e64336
 and
Marcela Mašláňová e64336
 .B batch
Marcela Mašláňová e64336
 read commands from standard input or a specified file which are to
Marcela Mašláňová e64336
-be executed at a later time, using
Marcela Mašláňová e64336
-.BR /bin/sh .
Marcela Mašláňová e64336
+be executed at a later time.
Marcela Mašláňová e64336
 .TP 8
Marcela Mašláňová e64336
 .BR at
Marcela Mašláňová e64336
 executes commands at a specified time.
Marcela Mašláňová e64336
@@ -227,6 +236,63 @@
Marcela Mašláňová e64336
 .B
Marcela Mašláňová e64336
 \-c
Marcela Mašláňová e64336
 cats the jobs listed on the command line to standard output.
Marcela Mašláňová e64336
+.TP
Marcela Mašláňová e64336
+.BI \-t " time_arg"
Marcela Mašláňová e64336
+Submit the job to be run at the time specified by the
Marcela Mašláňová e64336
+.BI time_arg
Marcela Mašláňová e64336
+option argument, which must have the same format as specified for the
Marcela Mašláňová e64336
+.BR touch(1)
Marcela Mašláňová e64336
+utility's
Marcela Mašláňová e64336
+.B \-t
Marcela Mašláňová e64336
+time option argument ([[CC]YY]MMDDhhmm).
Marcela Mašláňová e64336
+.SH ENVIRONMENT
Marcela Mašláňová e64336
+.P
Marcela Mašláňová e64336
+.TP 8
Marcela Mašláňová e64336
+.B SHELL
Marcela Mašláňová e64336
+The value of the SHELL environment variable at the time of
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+invocation will determine which shell is used to execute the
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+job commands. If SHELL is unset when
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+is invoked, the user's login shell will be used; otherwise,
Marcela Mašláňová e64336
+if SHELL is set when
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+is invoked, it must contain the path of a shell interpreter
Marcela Mašláňová e64336
+executable that will be used to run the commands at the specified time.
Marcela Mašláňová e64336
+.P
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+will record the values of
Marcela Mašláňová e64336
+environment variables present at time of
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+invocation. When the commands are run at the  specified time,
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+will restore these variables to their recorded values .
Marcela Mašláňová e64336
+These variables are excluded from this processing and are never
Marcela Mašláňová e64336
+set by
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+when the commands are run :
Marcela Mašláňová e64336
+.br
Marcela Mašláňová e64336
+.BI TERM,
Marcela Mašláňová e64336
+.BI DISPLAY,
Marcela Mašláňová e64336
+.BI SHELLOPTS,
Marcela Mašláňová e64336
+.BI _,
Marcela Mašláňová e64336
+.BI PPID,
Marcela Mašláňová e64336
+.BI BASH_VERSINFO,
Marcela Mašláňová e64336
+.BI EUID,
Marcela Mašláňová e64336
+.BI UID,
Marcela Mašláňová e64336
+.BI GROUPS.
Marcela Mašláňová e64336
+.br
Marcela Mašláňová e64336
+If the user submitting the
Marcela Mašláňová e64336
+.B at
Marcela Mašláňová e64336
+job is not the super-user, variables that alter the behaviour of the
Marcela Mašláňová e64336
+loader
Marcela Mašláňová e64336
+.BR ld.so(8),
Marcela Mašláňová e64336
+such as
Marcela Mašláňová e64336
+.B LD_LIBRARY_PATH
Marcela Mašláňová e64336
+, cannot be recorded and restored by
Marcela Mašláňová e64336
+.B at .
Marcela Mašláňová e64336
+.P
Marcela Mašláňová e64336
 .SH FILES
Marcela Mašláňová e64336
 .I @ATJBD@
Marcela Mašláňová e64336
 .br