SPECS: setup.spec - shouldn't the trigger be static program, as se...

Przemek Iskra sparky at sparky.homelinux.org
Sat Sep 17 02:31:26 CEST 2005


On Fri, Sep 16, 2005 at 10:39:40PM +0200, Przemek Iskra wrote:
 
> > could do inline lua scripting i believe?
> > 
> > %triggerpostin -p <lua>
> > LUA SCRIPTING LANGUAGE HERE.
> > 
> > i don't know lua, i only know it's possible, as i had similiar situation with 
> > glibc package :)
there's yes annother problem with lua, it requires recent rpm
i've written something like thah in c, requires some cosmetics but what
do you think ?


-- 
 ____  Sparky{PI] -- Przemyslaw _  ___  _  _  ..Mail,MSN  LANG...Pl..Ca..Es..En
/____) ___  ___  _ _ || Iskra  |  | _ \| |  | : WWW........ppcrcd.pld-linux.org
\____\| -_)'___| ||^'||//\\// <   |  _/| |  | : JID......sparky<at>jabberes.org
(____/||   (_-_|_||  ||\\ ||   |_ |_|  |_| _| :..sparky<at>sparky.homelinux.org
-------------- next part --------------
/*
 * adds devmode and devgid to usbfs in fstab
 *
 * sole small parts from joinpasswd by malekith 
 */

#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>

void eputs(const char *msg)
{
	write(2, msg, strlen(msg));
}

void fatal(const char *msg)
{
	eputs(msg);
	eputs("\n");
	exit(1);
}

int main()
{
	char *old, *id;
	char *name = "/etc/fstab";
	char *backup_name = "/etc/fstab.bak";
	int i, fd;
	int old_sz;
	char *add = ",devmode=0664,devgid=78";

	struct stat st;

	fd = open(name, O_RDONLY);
	if (fd == -1)
		return 1;
	fstat(fd, &st);
	old = (char *) malloc(st.st_size);
	read(fd, old, st.st_size);
	close(fd);
	old_sz = st.st_size;
	
	fd = open(backup_name, O_WRONLY|O_CREAT|O_TRUNC, 0600);
	if (fd < 0)
		fatal("cannot make backup");
	write(fd, old, old_sz);
	close(fd);
	
	
	// find usbfs
	for (i = 0; i < old_sz; i++) {
		if ( old[i] == 'u' && old[i+1] == 's' && old[i+2] == 'b'
				&& old[i+3] == 'f' && old[i+4] == 's')
			break;
	}
	// find defau(lts)
	for (;i < old_sz; i++) {
		if ( old[i] == 'd' && old[i+1] == 'e' && old[i+2] == 'f' && old[i+3] == 'a' && old[i+4] == 'u' )
			break;
	}
	// find first space
	for (;i < old_sz; i++) {
		if ( old[i] == ' ' || old[i] == '\t' )
			break;
	}
	if ( i >= old_sz )
		fatal("can't find correct usbfs entry");
	
	fd = open(name, O_WRONLY|O_CREAT|O_TRUNC);
	write(fd, old, i);
	write(fd, add, strlen(add));
	write(fd, old + i, old_sz - i);
	close(fd);
	
	return 0;
}



More information about the pld-devel-en mailing list