Blob Blame History Raw
/* find_home.test.c -- program to test find_home library */

/* (C) 2002 by Matthias Andree <matthias.andree@gmx.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details, it is in the file named
 * COPYING.
 */

#include "common.h"

#include <ctype.h>
#include <stdlib.h>

#include "find_home.h"

enum mode { current = 42, by_user, tilde };

/* run:
 * without arguments or with 0 argument to get home by user id
 * with tilde argument to try tilde expansion
 * with non-0 argument to try $HOME, then try user id
 */
int main(int argc, char **argv)
{
    const char *h;
    char *tofree = NULL;
    int read_env = 0;
    enum mode mode = current;

    if (argc >= 2) {
	if (!isdigit((unsigned char)argv[1][0])) {
	    if (argv[1][0] == '~') {
		mode = tilde;
	    } else {
		mode = by_user;
	    }
	} else {
	    read_env = atoi(argv[1]);
	}
    }

    switch (mode) {
	case by_user:
	    h = find_home_user(argv[1]);
	    break;
	case tilde:
	    h = tofree = tildeexpand(argv[1]);
	    break;
	case current:
	    h = find_home(read_env);
	    break;
	default:
	    abort();
    }

    if (h != NULL) {
	(void)puts(h);
    } else {
	perror(argv[0]);
    }
    if (tofree)
	free(tofree);

    exit(h ? EXIT_SUCCESS : EX_ERROR);
}