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