Code cleanup
This commit is contained in:
parent
84b191ee5b
commit
805cb07e39
37
src/ln.c
37
src/ln.c
|
@ -1,5 +1,5 @@
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
/* Copyright (c) 2007 Pierre Pronchery <khorben@defora.org> */
|
/* Copyright (c) 2009 Pierre Pronchery <khorben@defora.org> */
|
||||||
/* This file is part of DeforaOS Unix utils */
|
/* This file is part of DeforaOS Unix utils */
|
||||||
/* utils is not free software; you can redistribute it and/or modify it under
|
/* utils is not free software; you can redistribute it and/or modify it under
|
||||||
* the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 3.0
|
* the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 3.0
|
||||||
|
@ -33,6 +33,7 @@ typedef enum _LinkForce {
|
||||||
LF_NO,
|
LF_NO,
|
||||||
LF_YES
|
LF_YES
|
||||||
} LinkForce;
|
} LinkForce;
|
||||||
|
|
||||||
/* link type */
|
/* link type */
|
||||||
typedef enum _LinkType {
|
typedef enum _LinkType {
|
||||||
LT_HARD = 0,
|
LT_HARD = 0,
|
||||||
|
@ -47,9 +48,12 @@ typedef enum _LinkType {
|
||||||
* POST
|
* POST
|
||||||
* 0 success
|
* 0 success
|
||||||
* 2 error */
|
* 2 error */
|
||||||
|
static int _ln_error(char const * message, int ret);
|
||||||
static int _ln_is_directory(char * dest);
|
static int _ln_is_directory(char * dest);
|
||||||
static int _ln_single(LinkForce lf, LinkType lt, char * src, char * dest);
|
static int _ln_single(LinkForce lf, LinkType lt, char const * src,
|
||||||
|
char const * dest);
|
||||||
static int _ln_multiple(LinkForce lf, LinkType lt, int argc, char * argv[]);
|
static int _ln_multiple(LinkForce lf, LinkType lt, int argc, char * argv[]);
|
||||||
|
|
||||||
static int _ln(LinkForce lf, LinkType lt, int argc, char * argv[])
|
static int _ln(LinkForce lf, LinkType lt, int argc, char * argv[])
|
||||||
{
|
{
|
||||||
if(argc == 2 && !_ln_is_directory(argv[1]))
|
if(argc == 2 && !_ln_is_directory(argv[1]))
|
||||||
|
@ -57,6 +61,13 @@ static int _ln(LinkForce lf, LinkType lt, int argc, char * argv[])
|
||||||
return _ln_multiple(lf, lt, argc, argv);
|
return _ln_multiple(lf, lt, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _ln_error(char const * message, int ret)
|
||||||
|
{
|
||||||
|
fputs("ln: ", stderr);
|
||||||
|
perror(message);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int _ln_is_directory(char * dest)
|
static int _ln_is_directory(char * dest)
|
||||||
{
|
{
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
|
@ -66,37 +77,33 @@ static int _ln_is_directory(char * dest)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _ln_single(LinkForce lf, LinkType lt, char * src, char * dest)
|
static int _ln_single(LinkForce lf, LinkType lt, char const * src,
|
||||||
|
char const * dest)
|
||||||
{
|
{
|
||||||
if(lf == LF_YES)
|
if(lf == LF_YES)
|
||||||
unlink(dest);
|
unlink(dest);
|
||||||
if((lt == LT_HARD ? link(src, dest)
|
if((lt == LT_HARD ? link(src, dest) : symlink(src, dest)) == -1)
|
||||||
: symlink(src, dest)) == -1)
|
return _ln_error(dest, 1);
|
||||||
{
|
|
||||||
fputs("ln: ", stderr);
|
|
||||||
perror(src);
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int _ln_multiple(LinkForce lf, LinkType lt, int argc, char * argv[])
|
static int _ln_multiple(LinkForce lf, LinkType lt, int argc, char * argv[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
ssize_t len;
|
||||||
char * dest = NULL;
|
char * dest = NULL;
|
||||||
char * p;
|
char * p;
|
||||||
|
|
||||||
for(i = 0; i < argc - 1; i++)
|
for(i = 0; i < argc - 1; i++)
|
||||||
{
|
{
|
||||||
if((p = realloc(dest, strlen(argv[argc-1]) + strlen(argv[i])
|
len = strlen(argv[argc - 1]) + strlen(argv[i]) + 2;
|
||||||
+ 2))
|
if((p = realloc(dest, len)) == NULL)
|
||||||
== NULL)
|
|
||||||
{
|
{
|
||||||
perror("ln");
|
_ln_error(argv[i], 0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
dest = p;
|
dest = p;
|
||||||
sprintf(dest, "%s/%s", argv[argc-1], argv[i]);
|
sprintf(dest, "%s/%s", argv[argc - 1], argv[i]);
|
||||||
_ln_single(lf, lt, argv[i], dest);
|
_ln_single(lf, lt, argv[i], dest);
|
||||||
}
|
}
|
||||||
free(dest);
|
free(dest);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user