13 const char usage_fmt[] = "Usage: %s <file> <mountpoint>\n";
14 #define INAME_LEN (PATH_MAX + 1)
16 #define CHECK_IT(exp, pstr) \
18 fprintf(stderr, "%s: at %s:%d: ", progname, __FILE__, __LINE__); \
23 #define CHECK_SNPRINTF(rc, len) \
24 CHECK_IT((rc) > 0 && (rc) <= (len), "snprintf() failed")
26 static char *get_iname(char *fname, const char *mtpt)
32 iname = malloc(INAME_LEN);
33 CHECK_IT(iname, "malloc() failed");
35 fd = open(fname, O_CREAT, 0644);
36 CHECK_IT(fd >= 0 || errno == EISDIR, "open(fname) failed");
41 rc = stat(fname, &buf);
42 CHECK_IT(rc == 0, "stat(fname) failed");
44 rc = snprintf(iname, INAME_LEN,
45 "%s/__iopen__/%lu", mtpt, buf.st_ino);
46 CHECK_SNPRINTF(rc, INAME_LEN);
51 int main(int argc, char *argv[])
53 char *fname, *mtpt, *iname, *pname;
58 pname = strdup(argv[0]);
59 progname = basename(pname);
62 fprintf(stderr, usage_fmt, progname);
69 iname = get_iname(fname, mtpt);
71 printf("%s:started...\n",argv[0]);
73 rc = stat(fname, &buf);
74 CHECK_IT(rc == 0, "stat(fname) failed");
76 rc = stat(iname, &buf);
77 CHECK_IT(rc == 0, "stat(iname) failed");