Thread: pstrndup()
Hi guys, we have pstrdup(char *string) and this tiny patch adds pstrndup(char *sting, Size len). By the way, I a little played with the apache memory managment and they have the others interesting routines like ap_pstrcat(...) that concatenate all arguments (last must be NULL) to new allocated string. Is something like this interesting for PostgreSQL? Karel -- Karel Zak <zakkr@zf.jcu.cz> http://home.zf.jcu.cz/~zakkr/
Attachment
Karel, do you plan to use pstrndup for some purpose? I assume so. --------------------------------------------------------------------------- Karel Zak wrote: > > Hi guys, > > we have pstrdup(char *string) and this tiny patch adds > pstrndup(char *sting, Size len). > > By the way, I a little played with the apache memory managment and > they have the others interesting routines like ap_pstrcat(...) that > concatenate all arguments (last must be NULL) to new allocated > string. Is something like this interesting for PostgreSQL? > > Karel > > -- > Karel Zak <zakkr@zf.jcu.cz> > http://home.zf.jcu.cz/~zakkr/ [ Attachment, skipping... ] > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
Bruce Momjian <pgman@candle.pha.pa.us> writes: > Karel, do you plan to use pstrndup for some purpose? I assume so. I am not familiar with strndup. If the spec is like strncpy, I would vote against including it ... strncpy is so broken that we had to invent our own variant ... regards, tom lane
On Sun, Mar 21, 2004 at 11:45:18PM -0500, Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > Karel, do you plan to use pstrndup for some purpose? I assume so. I think PostgreSQL should supports basic operation with allocation/strings if it's open for users' C functions and we expect our own memory system usage. > I am not familiar with strndup. If the spec is like strncpy, I would > vote against including it ... strncpy is so broken that we had to invent > our own variant ... POSIX strncpy() is different, a result from strncpy needn't be zero terminated. You're right it's horrible function. The result of strndup() is always zero terminated. It's more safe and strndup() is binary safe because it doesn't check something in input string. The pstrndup() is based on PostgreSQL memory managment. Karel -- Karel Zak <zakkr@zf.jcu.cz> http://home.zf.jcu.cz/~zakkr/
Karel Zak wrote: > On Sun, Mar 21, 2004 at 11:45:18PM -0500, Tom Lane wrote: > > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > > Karel, do you plan to use pstrndup for some purpose? I assume so. > > I think PostgreSQL should supports basic operation with > allocation/strings if it's open for users' C functions and we expect > our own memory system usage. > > > I am not familiar with strndup. If the spec is like strncpy, I would > > vote against including it ... strncpy is so broken that we had to invent > > our own variant ... > > POSIX strncpy() is different, a result from strncpy needn't be zero > terminated. You're right it's horrible function. > > The result of strndup() is always zero terminated. It's more safe and > strndup() is binary safe because it doesn't check something in input > string. The pstrndup() is based on PostgreSQL memory managment. Can you find places to use this function our backend? Seems that should be part of the patch. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
Bruce Momjian <pgman@candle.pha.pa.us> writes: > Karel Zak wrote: >> The result of strndup() is always zero terminated. It's more safe and >> strndup() is binary safe because it doesn't check something in input >> string. The pstrndup() is based on PostgreSQL memory managment. > Can you find places to use this function our backend? Seems that should > be part of the patch. A bit of googling showed that strndup does appear in the "Linux standards base", but it is not to be found in the Single Unix Spec. That makes it at most quasi-standard IMHO. Like Bruce, I'd like to see a more convincing use-case before adopting not-very-standard functions. I don't think people will expect pstrndup to exist, or be very likely to use it if it's there, or necessarily know what its behavior is (for sure I was confused by the naming similarity with strncpy). That's a lot of strikes for something that replaces only three lines of C ... regards, tom lane
On Mon, Mar 22, 2004 at 10:04:01AM -0500, Tom Lane wrote: > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > Karel Zak wrote: > >> The result of strndup() is always zero terminated. It's more safe and > >> strndup() is binary safe because it doesn't check something in input > >> string. The pstrndup() is based on PostgreSQL memory managment. > > > Can you find places to use this function our backend? Seems that should > > be part of the patch. > > A bit of googling showed that strndup does appear in the "Linux > standards base", but it is not to be found in the Single Unix Spec. > That makes it at most quasi-standard IMHO. man strndup CONFORMING TO SVID 3, BSD 4.3 > with strncpy). That's a lot of strikes for something that replaces only > three lines of C ... How often are bugs with "add '\0' to last item of array"? Well, forget this patch... Karel -- Karel Zak <zakkr@zf.jcu.cz> http://home.zf.jcu.cz/~zakkr/
Karel Zak wrote: > On Mon, Mar 22, 2004 at 10:04:01AM -0500, Tom Lane wrote: > > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > > Karel Zak wrote: > > >> The result of strndup() is always zero terminated. It's more safe and > > >> strndup() is binary safe because it doesn't check something in input > > >> string. The pstrndup() is based on PostgreSQL memory managment. > > > > > Can you find places to use this function our backend? Seems that should > > > be part of the patch. > > > > A bit of googling showed that strndup does appear in the "Linux > > standards base", but it is not to be found in the Single Unix Spec. > > That makes it at most quasi-standard IMHO. > > man strndup > > CONFORMING TO > SVID 3, BSD 4.3 Strange, I don't see it on FreeBSD or BSD/OS. I wonder if it was removed in BSD 4.4. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073