- exit(1);
- fd = mkstemp(template);
- if (fd < 0)
- usage("unable to create tempfile");
- if (write(fd, buf, size) != size)
- strcpy(type, "bad");
- printf("%s: %s\n", template, type);
+ die("cat-file %s: bad file", argv[2]);
+ if (!strcmp("-t", argv[1])) {
+ buf = type;
+ size = strlen(type);
+ type[size] = '\n';
+ size++;
+ } else if (strcmp(type, argv[1])) {
+ die("cat-file %s: bad tag", argv[2]);
+ }
+
+ while (size > 0) {
+ long ret = write(1, buf, size);
+ if (ret < 0) {
+ if (errno == EAGAIN)
+ continue;
+ /* Ignore epipe */
+ if (errno == EPIPE)
+ break;
+ die("cat-file: %s", strerror(errno));
+ } else if (!ret) {
+ die("cat-file: disk full?");
+ }
+ size -= ret;
+ buf += ret;
+ }
+ return 0;