Skip to content

Commit

Permalink
reorganised code: fix #68 (dfc is too monolithic
Browse files Browse the repository at this point in the history
  • Loading branch information
rolinh committed Apr 1, 2012
1 parent c754b02 commit 5436bb0
Show file tree
Hide file tree
Showing 5 changed files with 217 additions and 138 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CFDEBUG = -g3 -pedantic -Wall -Wunused-parameter -Wlong-long\
SRC = src
MAN = man
EXEC = dfc
OBJS = ${SRC}/dfc.o
OBJS = ${SRC}/dfc.o ${SRC}/list.o

PREFIX=/usr/local
BINDIR=${PREFIX}/bin
Expand Down
95 changes: 0 additions & 95 deletions src/dfc.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,101 +319,6 @@ usage(int status)
/* NOTREACHED */
}

/*
* Initializes a queue structure
* @lst: queue pointer
*/
void
init_queue(struct list *lst)
{
lst->head = NULL;
lst->tail = NULL;
lst->fsmaxlen = -1;
lst->dirmaxlen = -1;
lst->typemaxlen = -1;
}

/*
* Checks if a queue is empty
* @lst: queue
* Returns:
* --> 1 (true) if the queue is empty
* --> 0 if not
*/
int
is_empty(struct list lst)
{
if (lst.head == NULL)
return 1;
/* NOTREACHED */
else
return 0;
/* NOTREACHED */
}

/*
* Enqueues an element into a queue
* @lst: queue pointer
* @elt: element
* Returns:
* --> -1 on error
* --> 0 on sucess
*/
int
enqueue(struct list *lst, struct fsmntinfo fmi)
{
struct fsmntinfo *new_fmi = malloc(sizeof(struct fsmntinfo));

if (new_fmi == NULL) {
(void)fputs("Error while allocating memory to fmi", stderr);
return -1;
/* NOTREACHED */
}

/* initialize the new element to be inserted in the queue */
*new_fmi = fmi;

if (is_empty((*lst)))
lst->head = new_fmi;
else
lst->tail->next = new_fmi;

lst->tail = new_fmi;

return 0;
/* NOTREACHED */
}

/*
* Inits an fsmntinfo to some defaults values
* Returns:
* --> fsmntinfo that has been initialized
*/
struct fsmntinfo
fmi_init(void)
{
struct fsmntinfo fmi;

fmi.fsname = "unknown";
fmi.dir = "unknown";
fmi.type = "unknown";
fmi.opts = "none";

fmi.bsize = 0;
fmi.frsize = 0;
fmi.blocks = 0;
fmi.bfree = 0;
fmi.bavail = 0;
fmi.files = 0;
fmi.ffree = 0;
fmi.favail = 0;

fmi.next = NULL;

return fmi;
/* NOTREACHED */
}

/*
* fetch information from getmntent and statvfs and store it into the queue
* @lst: queue in which to store information
Expand Down
44 changes: 2 additions & 42 deletions src/dfc.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,53 +32,13 @@
*
* header file for dfc.c
*/
#define VERSION "2.3.0"

/*
* structure needed to store informations about mounted fs
* It should contain brut datas.
* Later on, we would need to compute those infos:
* unsigned long bused; used blocks
* double prct_used; usage of fs in percent
* double prct_free; free space of fs in percent
*/
struct fsmntinfo {
/* infos to get from getmntent(3) */
char *fsname; /* name of mounted file system */
char *dir; /* file system path prefix */
char *type; /* mount type */
char *opts; /* mount options (see mntent.h) */

/* infos to get from statvfs(3) */
unsigned long bsize; /* file system block size */
unsigned long frsize; /* fragment size */
unsigned long blocks; /* size of fs in frsize unit */
unsigned long bfree; /* # of free blocks */
unsigned long bavail; /* # of available blocks */
unsigned long files; /* # of inodes */
unsigned long ffree; /* # of free inodes */
unsigned long favail; /* # of available inodes */
#include "list.h"

/* pointer to the next element of the list */
struct fsmntinfo *next;
};

/* list structure to store fsmntinfo */
struct list {
struct fsmntinfo *head;
struct fsmntinfo *tail;

int fsmaxlen; /* should be the size of the longest fsname */
int dirmaxlen; /* same for dir */
int typemaxlen; /* same for type */
};
#define VERSION "2.3.0"

/* function declaration */
static void usage(int status);
void init_queue(struct list *lst);
int is_empty(struct list lst);
int enqueue(struct list *lst, struct fsmntinfo elt);
struct fsmntinfo fmi_init(void);
void fetch_info(struct list *lst);
void disp(struct list *lst, char *fsfilter);
void disp_header(struct list *lst);
Expand Down
133 changes: 133 additions & 0 deletions src/list.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
/*
* Copyright (c) 2012, Robin Hahling
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1 Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2 Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4 Neither the name of the author nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*
* list.c
*
* (C) 2012 - Hahling Robin <robin.hahling@gw-computing.net>
*
* Manipulate list
*/
#include <stdio.h>
#include <stdlib.h>

#include "list.h"

/*
* Initializes a queue structure
* @lst: queue pointer
*/
void
init_queue(struct list *lst)
{
lst->head = NULL;
lst->tail = NULL;
lst->fsmaxlen = -1;
lst->dirmaxlen = -1;
lst->typemaxlen = -1;
}

/*
* Checks if a queue is empty
* @lst: queue
* Returns:
* --> 1 (true) if the queue is empty
* --> 0 if not
*/
int
is_empty(struct list lst)
{
if (lst.head == NULL)
return 1;
/* NOTREACHED */
else
return 0;
/* NOTREACHED */
}

/*
* Enqueues an element into a queue
* @lst: queue pointer
* @elt: element
* Returns:
* --> -1 on error
* --> 0 on sucess
*/
int
enqueue(struct list *lst, struct fsmntinfo fmi)
{
struct fsmntinfo *new_fmi = malloc(sizeof(struct fsmntinfo));

if (new_fmi == NULL) {
(void)fputs("Error while allocating memory to fmi", stderr);
return -1;
/* NOTREACHED */
}

/* initialize the new element to be inserted in the queue */
*new_fmi = fmi;

if (is_empty((*lst)))
lst->head = new_fmi;
else
lst->tail->next = new_fmi;

lst->tail = new_fmi;

return 0;
/* NOTREACHED */
}

/*
* Inits an fsmntinfo to some defaults values
* Returns:
* --> fsmntinfo that has been initialized
*/
struct fsmntinfo
fmi_init(void)
{
struct fsmntinfo fmi;

fmi.fsname = "unknown";
fmi.dir = "unknown";
fmi.type = "unknown";
fmi.opts = "none";

fmi.bsize = 0;
fmi.frsize = 0;
fmi.blocks = 0;
fmi.bfree = 0;
fmi.bavail = 0;
fmi.files = 0;
fmi.ffree = 0;
fmi.favail = 0;

fmi.next = NULL;

return fmi;
/* NOTREACHED */
}
81 changes: 81 additions & 0 deletions src/list.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright (c) 2012, Robin Hahling
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1 Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2 Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4 Neither the name of the author nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef LIST_H
#define LIST_H
/*
* list.h
*
* list structure
*/

/*
* structure needed to store informations about mounted fs
* It should contain brut datas.
* Later on, we would need to compute those infos:
* unsigned long bused; used blocks
* double prct_used; usage of fs in percent
* double prct_free; free space of fs in percent
*/
struct fsmntinfo {
/* infos to get from getmntent(3) */
char *fsname; /* name of mounted file system */
char *dir; /* file system path prefix */
char *type; /* mount type */
char *opts; /* mount options (see mntent.h) */

/* infos to get from statvfs(3) */
unsigned long bsize; /* file system block size */
unsigned long frsize; /* fragment size */
unsigned long blocks; /* size of fs in frsize unit */
unsigned long bfree; /* # of free blocks */
unsigned long bavail; /* # of available blocks */
unsigned long files; /* # of inodes */
unsigned long ffree; /* # of free inodes */
unsigned long favail; /* # of available inodes */

/* pointer to the next element of the list */
struct fsmntinfo *next;
};

/* list structure to store fsmntinfo */
struct list {
struct fsmntinfo *head;
struct fsmntinfo *tail;

int fsmaxlen; /* should be the size of the longest fsname */
int dirmaxlen; /* same for dir */
int typemaxlen; /* same for type */
};

/* function declaration */
void init_queue(struct list *lst);
int is_empty(struct list lst);
int enqueue(struct list *lst, struct fsmntinfo elt);
struct fsmntinfo fmi_init(void);

#endif /* ndef LIST_H */

0 comments on commit 5436bb0

Please sign in to comment.