13839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
23839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * mklost+found.c	- Creates a directory lost+found on a mounted second
33839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *			  extended file system
43839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
53839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Copyright (C) 1992, 1993  Remy Card <card@masi.ibp.fr>
63839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o *
73839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * This file can be redistributed under the terms of the GNU General
83839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * Public License
93839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
103839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
113839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o/*
123839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * History:
133839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o * 93/04/22	- Creation
143839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o */
153839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
163839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <errno.h>
173839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <fcntl.h>
183839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <stdio.h>
193839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <string.h>
203839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <unistd.h>
21c8c071a07319939dfd7ae2ff1dedec644d750debTheodore Ts'o#include <stdlib.h>
223839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/param.h>
233839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include <sys/stat.h>
243839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
2554c637d4d29af3e6365779f8b12976abe95a4753Theodore Ts'o#include "ext2fs/ext2_fs.h"
263839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#include "../version.h"
27d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o#include "nls-enable.h"
283839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
293839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o#define LPF "lost+found"
303839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
3100e5433eb5e9f70f485968b809fdcf297d7fe7b9Theodore Ts'oint main (int argc, char ** argv)
323839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o{
333839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	char name [EXT2_NAME_LEN];
34a418d3ad819323f871005d253f7f9ac378e78ba5Theodore Ts'o	char path [sizeof (LPF) + 1 + 256];
353839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	struct stat st;
363839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int i, j;
373839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	int d;
383839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o
39d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o#ifdef ENABLE_NLS
40d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o	setlocale(LC_MESSAGES, "");
4114308a5398984842e808faa3ff2dd6a1c52d90bdTheodore Ts'o	setlocale(LC_CTYPE, "");
42d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o	bindtextdomain(NLS_CAT_NAME, LOCALEDIR);
43d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o	textdomain(NLS_CAT_NAME);
44d9c56d3ca0bee11e3446ff7e12e3124d28e298a7Theodore Ts'o#endif
450f8973fb092a40fd0a11b7ec95c09128c9fb8f0cTheodore Ts'o	fprintf (stderr, "mklost+found %s (%s)\n", E2FSPROGS_VERSION,
460f8973fb092a40fd0a11b7ec95c09128c9fb8f0cTheodore Ts'o		 E2FSPROGS_DATE);
473839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	if (argc != 1) {
48b969b1b8a5c13992cadb026114731958644540d8Matthias Andree		(void)argv; /* avoid unused argument warning */
49e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall		fprintf (stderr, "%s", _("Usage: mklost+found\n"));
503839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		exit(1);
513839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	}
5264aecc4dd35b48f66f452f06c49587c838990d39Theodore Ts'o	if (mkdir (LPF, 0700) == -1) {
533839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		perror ("mkdir");
543839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		exit(1);
553839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	}
56efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o
573839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	i = 0;
58fcadc8c84cf0a390ab8a41ff620bb31630b5e0a9Theodore Ts'o	memset (name, 'x', 246);
593839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	do {
60fcadc8c84cf0a390ab8a41ff620bb31630b5e0a9Theodore Ts'o		sprintf (name + 246, "%08d", i);
613839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		strcpy (path, LPF);
623839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		strcat (path, "/");
633839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		strcat (path, name);
643839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		if ((d = creat (path, 0644)) == -1) {
653839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o			perror ("creat");
663839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o			exit (1);
673839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		}
683839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		i++;
693839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		close (d);
703839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		if (stat (LPF, &st) == -1) {
713839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o			perror ("stat");
723839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o			exit (1);
733839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		}
743839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	} while (st.st_size <= (EXT2_NDIR_BLOCKS - 1) * st.st_blksize);
753839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	for (j = 0; j < i; j++) {
76fcadc8c84cf0a390ab8a41ff620bb31630b5e0a9Theodore Ts'o		sprintf (name + 246, "%08d", j);
773839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		strcpy (path, LPF);
783839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		strcat (path, "/");
793839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		strcat (path, name);
803839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		if (unlink (path) == -1) {
813839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o			perror ("unlink");
823839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o			exit (1);
833839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o		}
843839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	}
853839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o	exit (0);
863839e65723771b85975f4263102dd3ceec4523cTheodore Ts'o}
87