On 8/5/07, Otto Moerbeek <[EMAIL PROTECTED]> wrote:
>
> On Sat, 4 Aug 2007, Andris wrote:
>
> > Hi, I'm writing a set of small utilities as scripts, and I got a
> > segmentation fault working on one of them.
>
> I tried running your script but it did not produce any seg faults.
> Do you have example input that causes a seg fault?
>
> -Otto
>
> >
> > The script is suppoused to align text with spaces. Say you have this
file:
> >
> > Foo1\tFoo2
> > Baaaaaaaaaaaar\tBar2
> > Baz
> >
> > Where \t are horizontal tabs. My script would replace the tabs with an
> > adequate number of spaces to align foo2 and bar2.
> >
> > Right now it works with a file named "file" in the working directory.
> > Of course this is only temporal.
> >
> > The problem is that I get a segmentation fault when I run it. That
> > never happened to me with a shell script. And I can't see where should
> > be a problem.
> >
> > I'm running OpenBSD 4.1-stable, GENERIC, i386. I don't know if it's
> > important, but I didn't create a swap partition (I'm planning to
> > change this).
> >
> > If someone could light me, I'd be very grateful.
> >
> > Here is the script:
> >
> > #!/bin/sh
> >
> > IFS='
> > '
> >
> > file=file
> >
> > for line in `< "${file}"`; do
> >
> > fields=`printf '%s' "${line}" | sed 's/[^ ]//g' | wc -m`
> > fields=$((${fields} + 1))
> >
> > if [ "${fields}" -eq 1 ]; then
> > printf '%s' "${line}"
> > else
> > for field in `jot "${fields}"`; do
> > max_width=`cut -f "${field}" "${file}" | awk '{ l =
length($0); if
> > (l > m) m = l } END { print m }'`
> > width=`printf '%s' "${line}" | cut -f "${field}" |
awk '{ print
> > length($0) }'`
> >
> > printf '%s' "`printf '%s' "${line}" | cut -f
"${field}"`"
> >
> > if [ "${field}" -lt "${fields}" ]; then
> > for i in `jot "$((${max_width} -
${width}))"`; do
> > printf '.'
> > done
> > fi
> > done
> > fi
> >
> > printf '\n'
> > done
> >
> >
Yeap, it segfaults here with:
aTbTc
daaaaaaaaaaaTe
fsssssssssssssssssssssssssssss
Upper case T are horizontal tabs. It makes OpenBSD freeze too :S