F GETPATH

From Attie's Wiki
(Difference between revisions)
Jump to: navigation, search
(Created page with "This is untested code... <source lang="c"> #if 0 - this would be nice...: if (fcntl(fd, F_GETPATH, fname) == -1) { strerror_r(errno, es, ES...")
 
m
Line 2: Line 2:
  
 
<source lang="c">
 
<source lang="c">
 +
char fname[PATH_MAX];
 
#if 0
 
#if 0
        /* this would be nice... */
+
/* this would be nice... */
        if (fcntl(fd, F_GETPATH, fname) == -1) {
+
if (fcntl(fd, F_GETPATH, fname) == -1) {
                strerror_r(errno, es, ES_LEN);
+
strerror_r(errno, es, ES_LEN);
                fprintf(stderr, "fcntl(): %s\n", es);
+
fprintf(stderr, "fcntl(): %s\n", es);
                return -1;
+
return -1;
        }
+
}
#else
+
#else
        {
+
{
                const char t[PATH_MAX];
+
const char t[PATH_MAX];
                struct stat a, b;
+
struct stat a, b;
                snprintf(t, sizeof(t), "/proc/self/fd/%d", fd);
+
snprintf(t, sizeof(t), "/proc/self/fd/%d", fd);
                if (readlink(t, fname, sizeof(fname)) == -1) {
+
if (readlink(t, fname, sizeof(fname)) == -1) {
                        strerror_r(errno, es, ES_LEN);
+
strerror_r(errno, es, ES_LEN);
                        fprintf(stderr, "readlink(%s): %s\n", t, es);
+
fprintf(stderr, "readlink(%s): %s\n", t, es);
                        return -1;
+
return -1;
                }
+
}
  
                if (stat(fname, &a) == -1) {
+
if (stat(fname, &a) == -1) {
                        strerror_r(errno, es, ES_LEN);
+
strerror_r(errno, es, ES_LEN);
                        fprintf(stderr, "stat(%s): %s\n", fname, es);
+
fprintf(stderr, "stat(%s): %s\n", fname, es);
                        return -1;
+
return -1;
                }
+
}
                if (stat(t, &b) == -1) {
+
if (stat(t, &b) == -1) {
                        strerror_r(errno, es, ES_LEN);
+
strerror_r(errno, es, ES_LEN);
                        fprintf(stderr, "stat(%s): %s\n", t, es);
+
fprintf(stderr, "stat(%s): %s\n", t, es);
                        return -1;
+
return -1;
                }
+
}
  
                if (a.st_dev != b.st_dev || a.st_ino != b.st_ino) {
+
if (a.st_dev != b.st_dev || a.st_ino != b.st_ino) {
                        fprintf(stderr, "get_db(): tempoary file lost...\n");
+
fprintf(stderr, "get_db(): tempoary file lost...\n");
                        return -1;
+
return -1;
                }
+
}
        }
+
}
 
#endif
 
#endif
 
</source>
 
</source>

Revision as of 09:31, 23 December 2013

This is untested code...

	char fname[PATH_MAX];
#if 0
	/* this would be nice... */
	if (fcntl(fd, F_GETPATH, fname) == -1) {
		strerror_r(errno, es, ES_LEN);
		fprintf(stderr, "fcntl(): %s\n", es);
		return -1;
	}
	#else
	{
		const char t[PATH_MAX];
		struct stat a, b;
		snprintf(t, sizeof(t), "/proc/self/fd/%d", fd);
		if (readlink(t, fname, sizeof(fname)) == -1) {
			strerror_r(errno, es, ES_LEN);
			fprintf(stderr, "readlink(%s): %s\n", t, es);
			return -1;
		}
 
		if (stat(fname, &a) == -1) {
			strerror_r(errno, es, ES_LEN);
			fprintf(stderr, "stat(%s): %s\n", fname, es);
			return -1;
		}
		if (stat(t, &b) == -1) {
			strerror_r(errno, es, ES_LEN);
			fprintf(stderr, "stat(%s): %s\n", t, es);
			return -1;
		}
 
		if (a.st_dev != b.st_dev || a.st_ino != b.st_ino) {
			fprintf(stderr, "get_db(): tempoary file lost...\n");
			return -1;
		}
	}
#endif
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox