]> git.ipfire.org Git - thirdparty/e2fsprogs.git/blame - lib/ext2fs/newdir.c
Many files:
[thirdparty/e2fsprogs.git] / lib / ext2fs / newdir.c
CommitLineData
3839e657
TT
1/*
2 * newdir.c --- create a new directory block
3 *
4 * Copyright (C) 1994 Theodore Ts'o. This file may be redistributed
5 * under the terms of the GNU Public License.
6 */
7
8#include <stdio.h>
9#include <string.h>
10#include <unistd.h>
11#include <stdlib.h>
f3db3566 12
3839e657
TT
13#include <linux/ext2_fs.h>
14
15#include "ext2fs.h"
16
17/*
18 * Create new directory block
19 */
20errcode_t ext2fs_new_dir_block(ext2_filsys fs, ino_t dir_ino, ino_t parent_ino,
21 char **block)
22{
23 char *buf;
24 struct ext2_dir_entry *dir = NULL;
25 int rec_len;
26
f3db3566
TT
27 EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
28
3839e657
TT
29 buf = malloc(fs->blocksize);
30 if (!buf)
31 return ENOMEM;
32 memset(buf, 0, fs->blocksize);
33 dir = (struct ext2_dir_entry *) buf;
34 dir->rec_len = fs->blocksize;
35
36 if (dir_ino) {
37 /*
38 * Set up entry for '.'
39 */
40 dir->inode = dir_ino;
41 dir->name_len = 1;
42 dir->name[0] = '.';
43 rec_len = dir->rec_len - EXT2_DIR_REC_LEN(dir->name_len);
44 dir->rec_len = EXT2_DIR_REC_LEN(dir->name_len);
45
46 /*
47 * Set up entry for '..'
48 */
49 dir = (struct ext2_dir_entry *) (buf + dir->rec_len);
50 dir->rec_len = rec_len;
51 dir->inode = parent_ino;
52 dir->name_len = 2;
53 dir->name[0] = '.';
54 dir->name[1] = '.';
55
56 }
57 *block = buf;
58 return 0;
59}