123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /* chstack - set stack size */
- #include <stdio.h>
- #define OFF 48L /* offset of stacksize in file */
- #define MAX 32768L /* maximum accepted stacksize */
- main(argc, argv)
- int argc;
- char *argv[];
- {
- char *p;
- long n;
- int fd;
- long current;
- long old;
- long atol(), lseek();
- p = argv[1];
- if (argc != 3 || (*p != '=' && *p != '+' && *p != '-')) {
- fprintf(stderr, "Usage: %s {=+-}amount file\n", argv[0]);
- exit(1);
- }
- n = atol(p+1);
- fd = open(argv[2], 2);
- if (fd < 0) {
- fprintf(stderr, "%s: cannot open %s\n", argv[0], argv[2]);
- exit(1);
- }
- if (lseek(fd, OFF, 0) < 0 || getlong(fd, ¤t) < 0) {
- fprintf(stderr, "%s: cannot read %s\n", argv[0], argv[2]);
- exit(1);
- }
- old = current;
- if (*p == '=') current = n;
- else if (*p == '-') current -= n;
- else current += n;
- if (current > MAX || current <= 0) {
- fprintf(stderr, "%s: resulting stack size %ld too large or too small\n", argv[0], current);
- exit(1);
- }
- if (lseek(fd, OFF, 0) < 0 || putlong(fd, ¤t) < 0) {
- fprintf(stderr, "%s: can't modify %s\n", argv[0], argv[2]);
- exit(1);
- }
- printf("%s: Stack area changed from %ld to %ld bytes.\n",
- argv[2], old, current);
- exit(0);
- }
- getlong(fd, l)
- long *l;
- {
- char buf[4];
- if (read(fd, buf, 4) < 4) return -1;
- *l = ((((long)(buf[3]&0377)<<8)|(long)(buf[2]&0377)<<8)|(long)(buf[1]&0377)<<8)|(long)(buf[0]&0377);
- return 0;
- }
- putlong(fd, l)
- long *l;
- {
- char buf[4];
- buf[3] = *l >> 24;
- buf[2] = *l >> 16;
- buf[1] = *l >> 8;
- buf[0] = *l;
- if (write(fd, buf, 4) < 4) return -1;
- return 0;
- }
|