uuprog
annotate pwd.c @ 0:4f628556fa3e
uuprog initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Thu, 25 Aug 2011 08:53:01 +0300 |
parents | |
children |
rev | line source |
---|---|
nuclear@0 | 1 /*! gcc -std=c89 -pedantic -Wall -o pwd pwd.c */ |
nuclear@0 | 2 #include <stdio.h> |
nuclear@0 | 3 #include <stdlib.h> |
nuclear@0 | 4 #include <string.h> |
nuclear@0 | 5 #include <errno.h> |
nuclear@0 | 6 #include <unistd.h> |
nuclear@0 | 7 |
nuclear@0 | 8 int main(void) |
nuclear@0 | 9 { |
nuclear@0 | 10 char *tmp, *wdbuf; |
nuclear@0 | 11 size_t bufsz = 64; |
nuclear@0 | 12 |
nuclear@0 | 13 if(!(wdbuf = malloc(bufsz))) { |
nuclear@0 | 14 perror("malloc failed"); |
nuclear@0 | 15 return 1; |
nuclear@0 | 16 } |
nuclear@0 | 17 |
nuclear@0 | 18 while(!(tmp = getcwd(wdbuf, bufsz)) && errno == ERANGE) { |
nuclear@0 | 19 size_t newsz = bufsz ? bufsz * 2 : 2; |
nuclear@0 | 20 |
nuclear@0 | 21 if(!(tmp = realloc(wdbuf, newsz))) { |
nuclear@0 | 22 fprintf(stderr, "failed to allocate: %u bytes: %s\n", (unsigned int)newsz, strerror(errno)); |
nuclear@0 | 23 free(wdbuf); |
nuclear@0 | 24 return 1; |
nuclear@0 | 25 } |
nuclear@0 | 26 wdbuf = tmp; |
nuclear@0 | 27 bufsz = newsz; |
nuclear@0 | 28 } |
nuclear@0 | 29 |
nuclear@0 | 30 if(!tmp) { |
nuclear@0 | 31 perror("getcwd failed"); |
nuclear@0 | 32 free(wdbuf); |
nuclear@0 | 33 return 1; |
nuclear@0 | 34 } |
nuclear@0 | 35 |
nuclear@0 | 36 puts(wdbuf); |
nuclear@0 | 37 free(wdbuf); |
nuclear@0 | 38 return 0; |
nuclear@0 | 39 } |