fgetversion.c revision 66d8c3f33f976e83ea0efd361bb5ac182315a421
13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * fgetversion.c	- Get a file version on an ext2 file system
33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
43839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Copyright (C) 1993, 1994  Remy Card <card@masi.ibp.fr>
53839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *                           Laboratoire MASI, Institut Blaise Pascal
63839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *                           Universite Pierre et Marie Curie (Paris VI)
73839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
83839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * This file can be redistributed under the terms of the GNU Library General
93839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Public License
103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * History:
143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 93/10/30	- Creation
153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
1766d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define _LARGEFILE_SOURCE
1866d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define _LARGEFILE64_SOURCE
1966d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o
2050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#if HAVE_ERRNO_H
213839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <errno.h>
2250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
2350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#if HAVE_UNISTD_H
243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <unistd.h>
2550e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif
2650e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#include <fcntl.h>
273839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/ioctl.h>
283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include "e2p.h"
303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
3166d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#ifdef O_LARGEFILE
3266d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK|O_LARGEFILE)
3366d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#else
3466d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#define OPEN_FLAGS (O_RDONLY|O_NONBLOCK)
3566d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o#endif
3666d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o
373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'oint fgetversion (const char * name, unsigned long * version)
383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
3950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#if HAVE_EXT2_IOCTLS
40cce382b12c2e0764b91d143ec6f9549c735f8f9eTheodore Ts'o	int fd, r, ver;
413839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
4266d8c3f33f976e83ea0efd361bb5ac182315a421Theodore Ts'o	fd = open (name, OPEN_FLAGS);
433839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	if (fd == -1)
443839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		return - 1;
4517dba281a042d3f8122ef7ce6933035a8eae074aTheodore Ts'o	r = ioctl (fd, EXT2_IOC_GETVERSION, &ver);
46cce382b12c2e0764b91d143ec6f9549c735f8f9eTheodore Ts'o	*version = ver;
473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	close (fd);
483839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	return r;
4950e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#else /* ! HAVE_EXT2_IOCTLS */
5050e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	extern int errno;
5150e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	errno = EOPNOTSUPP;
5250e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o	return -1;
5350e1e10fa0ac12a3e2a9d20a75ee9041873cda96Theodore Ts'o#endif /* ! HAVE_EXT2_IOCTLS */
543839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
55