123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- /*
- * CDE - Common Desktop Environment
- *
- * Copyright (c) 1993-2012, The Open Group. All rights reserved.
- *
- * These libraries and programs are free software; you can
- * redistribute them and/or modify them under the terms of the GNU
- * Lesser General Public License as published by the Free Software
- * Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * These libraries and programs are distributed in the hope that
- * they will be useful, but WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- * PURPOSE. See the GNU Lesser General Public License for more
- * details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with these libraries and programs; if not, write
- * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
- * Floor, Boston, MA 02110-1301 USA
- */
- /* $XConsortium: shipop.c /main/4 1996/10/04 15:58:45 drk $ */
- /***************************************************************
- * *
- * AT&T - PROPRIETARY *
- * *
- * THIS IS PROPRIETARY SOURCE CODE LICENSED BY *
- * AT&T CORP. *
- * *
- * Copyright (c) 1995 AT&T Corp. *
- * All Rights Reserved *
- * *
- * This software is licensed by AT&T Corp. *
- * under the terms and conditions of the license in *
- * http://www.research.att.com/orgs/ssr/book/reuse *
- * *
- * This software was created by the *
- * Software Engineering Research Department *
- * AT&T Bell Laboratories *
- * *
- * For further information contact *
- * gsf@research.att.com *
- * *
- ***************************************************************/
- /* : : generated by proto : : */
- #if !defined(__PROTO__)
- #if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
- #if defined(__cplusplus)
- #define __MANGLE__ "C"
- #else
- #define __MANGLE__
- #endif
- #define __STDARG__
- #define __PROTO__(x) x
- #define __OTORP__(x)
- #define __PARAM__(n,o) n
- #if !defined(__STDC__) && !defined(__cplusplus)
- #if !defined(c_plusplus)
- #define const
- #endif
- #define signed
- #define void int
- #define volatile
- #define __V_ char
- #else
- #define __V_ void
- #endif
- #else
- #define __PROTO__(x) ()
- #define __OTORP__(x) x
- #define __PARAM__(n,o) o
- #define __MANGLE__
- #define __V_ char
- #define const
- #define signed
- #define void int
- #define volatile
- #endif
- #if defined(__cplusplus) || defined(c_plusplus)
- #define __VARARG__ ...
- #else
- #define __VARARG__
- #endif
- #if defined(__STDARG__)
- #define __VA_START__(p,a) va_start(p,a)
- #else
- #define __VA_START__(p,a) va_start(p)
- #endif
- #endif
- static const char id[] = "\n@(#)shipop (AT&T Bell Laboratories) 06/11/92\0\n";
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #define elementsof(x) (sizeof(x)/sizeof(x[0]))
- static char* cmd = "shipop";
- static char* op;
- static int status;
- extern __MANGLE__ int close __PROTO__((int));
- extern __MANGLE__ void exit __PROTO__((int));
- extern __MANGLE__ int open __PROTO__((const char*, int, ...));
- extern __MANGLE__ int read __PROTO__((int, char*, int));
- extern __MANGLE__ int strcmp __PROTO__((const char*, const char*));
- extern __MANGLE__ time_t time __PROTO__((time_t*));
- static void
- error __PARAM__((int level, const char* file, const char* msg), (level, file, msg)) __OTORP__(int level; const char* file; const char* msg;){
- fprintf(stderr, "%s: %s", cmd, op);
- if (level == 1) fprintf(stderr, ": warning");
- if (file) fprintf(stderr, ": %s", file);
- if (msg) fprintf(stderr, ": %s", msg);
- fprintf(stderr, "\n");
- if (level > status)
- {
- if (level > 2) exit(level - 2);
- status = level;
- }
- }
- /*
- * shipop newer [ reference [ file ... ] ]
- */
- static int
- shipnewer __PARAM__((char** argv), (argv)) __OTORP__(char** argv;){
- unsigned long ref;
- struct stat st;
- if (!*argv || stat(*argv, &st)) return(1);
- ref = (unsigned long)st.st_mtime;
- while (*++argv)
- if (stat(*argv, &st) || ref < (unsigned long)st.st_mtime) return(1);
- return(0);
- }
- #define HASHPART(h,c) (h = (h) * 987654321L + 123456879L + (c))
- static char buf[4096];
- static unsigned long
- sealfile __PARAM__((char* file, int fd, unsigned long s), (file, fd, s)) __OTORP__(char* file; int fd; unsigned long s;){
- unsigned char* b;
- unsigned char* e;
- int n;
- HASHPART(s, 0);
- while ((n = read(fd, buf, sizeof(buf))) > 0)
- {
- b = (unsigned char*)buf;
- e = b + n;
- while (b < e) HASHPART(s, *b++);
- }
- if (n < 0) error(2, file, "read error");
- return(s);
- }
- /*
- * shipop seal [ file ... ]
- */
- static int
- shipseal __PARAM__((char** argv), (argv)) __OTORP__(char** argv;){
- char* f;
- int fd;
- unsigned long s;
- s = 0;
- if (!*argv) s = sealfile("/dev/stdin", 0, s);
- else while (f = *argv++)
- {
- if (*f == '-' && !*(f + 1)) s = sealfile("/dev/stdin", 0, s);
- else if ((fd = open(f, 0)) < 0) error(2, f, "cannot read");
- else
- {
- s = sealfile(f, fd, s);
- close(fd);
- }
- }
- printf("%08lx\n", s);
- return(status);
- }
- /*
- * shipop state reference [ file ... | <file-list ]
- */
- static int
- shipstate __PARAM__((char** argv), (argv)) __OTORP__(char** argv;){
- char* s;
- int c;
- long ref;
- struct stat st;
- if (!(s = *argv++) || stat(s, &st)) error(3, (char*)0, "reference file omitted");
- ref = (long)st.st_mtime;
- if (s = *argv++) do
- {
- if (!stat(s, &st))
- printf("%s %ld\n", s, (long)st.st_mtime - ref);
- } while (s = *argv++);
- else do
- {
- s = buf;
- while ((c = getchar()) != EOF && c != ' ' && c != '\n')
- if (s < buf + sizeof(buf) - 1) *s++ = c;
- if (s > buf)
- {
- *s = 0;
- if (!stat(buf, &st))
- printf("%s %ld\n", buf, (long)st.st_mtime - ref);
- }
- } while (c != EOF);
- return(status);
- }
- /*
- * shipop time [ file ]
- */
- static int
- shiptime __PARAM__((char** argv), (argv)) __OTORP__(char** argv;){
- struct stat st;
- time_t date;
- if (*argv && !stat(*argv, &st)) date = st.st_mtime;
- else time(&date);
- printf("%08lx\n", (long)date);
- return(status);
- }
- /*
- * shipop xap [ file ... ]
- */
- static int
- shipxap __PARAM__((char** argv), (argv)) __OTORP__(char** argv;){
- error(2, "xap not implemented yet", (char*)0);
- return(1);
- }
- struct optab
- {
- char* name;
- int (*func) __PROTO__((char**));
- };
- static struct optab ops[] =
- {
- "newer", shipnewer,
- "seal", shipseal,
- "state", shipstate,
- "time", shiptime,
- "xap", shipxap,
- };
- int main __PARAM__((int argc, char** argv), (argc, argv)) __OTORP__(int argc; char** argv;){
- char* s;
- int i;
- if (!(s = *++argv))
- exit(0);
- for (i = 0; i < elementsof(ops); i++)
- if (!strcmp(s, ops[i].name))
- {
- op = ops[i].name;
- exit((*ops[i].func)(argv + 1));
- }
- fprintf(stderr, "Usage: %s %s", cmd, ops[0].name);
- for (i = 1; i < elementsof(ops); i++)
- fprintf(stderr, " | %s", ops[i].name);
- fprintf(stderr, " [ file ... ]\n");
- exit(2);
- }
|